[ 
https://issues.apache.org/jira/browse/JAMES-3365?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17189814#comment-17189814
 ] 

René Cordier edited comment on JAMES-3365 at 9/3/20, 3:29 AM:
--------------------------------------------------------------

[https://github.com/linagora/james-project/pull/3683] contributed the 
back-references resolution


was (Author: rcordier):
[https://github.com/linagora/james-project/pull/3683] contributed the 
references back-resolution

> JMAP RFC-8621 : Back-reference resolution
> -----------------------------------------
>
>                 Key: JAMES-3365
>                 URL: https://issues.apache.org/jira/browse/JAMES-3365
>             Project: James Server
>          Issue Type: New Feature
>          Components: JMAP
>            Reporter: Benoit Tellier
>            Assignee: Antoine Duprat
>            Priority: Major
>
> ## Why
> https://jmap.io/spec-core.html#references-to-previous-method-results
> To allow clients to make more efficient use of the network and avoid round 
> trips, an argument to one method can be taken from the result of a previous 
> method call in the same request.
> Example:
> {code:java}
> [[ "Foo/changes", {
>     "accountId": "A1",
>     "sinceState": "abcdef"
> }, "t0" ],
> [ "Foo/get", {
>     "accountId": "A1",
>     "#ids": {
>         "resultOf": "t0",
>         "name": "Foo/changes",
>         "path": "/created"
>     }
> }, "t1" ]]
> {code}
> `back references` that mean server will reuse the result of a previous method 
> call in the same request.
> Process is:
> - When processing a method call, the server MUST first check the arguments 
> object for any names beginning with **#**.
> - If found, the result reference should be resolved and the value used as the 
> “real” argument.
> - If any result reference fails to resolve, the whole method MUST be rejected 
> with an **invalidResultReference** error.
> - If an arguments object contains the same argument name in normal and 
> referenced form (e.g., foo and #foo), the method MUST return an 
> **invalidArguments** error.
> A **ResultReference** object has the following properties:
> - **resultOf**: String The method call id (see Section 3.1.1) of a previous 
> method call in the current request.
> - **name**: String The required name of a response to that method call.
> - **path**: String A pointer into the arguments of the response selected via 
> the name and resultOf properties. This is a JSON Pointer, except it also 
> allows the use of * to map through an array (see the description below).
> ## How
> https://github.com/linagora/james-project/pull/3683 demonstrated a proof of 
> concept doing JSON substitution within the method arguments (relying on 
> play-JSON JSON transformers) before the actual processing start
> This makes back-reference resolution completly orthogonal to the Methods 
> being written.
> ## Definition of Done
> Write some simple memory integration tests demonstrating back-references are 
> resolved. Also test back-reference resolution failure.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to