Hi, we want to expose upload file feature of an entity thru restful
interface.

According to restful spec https://github.com/danhaywood/restfulobjects-spec
it should go like this:

*16.2.2 Request (if blobClobs)*
*Updating blobClob properties is performed by PUTting the actual value*
*(e.g. image), with appropriate content type.*
*Note that optional validation (x-ro-validate-only) and domain type*
*metadata preferences (x-ro-domain-model) are not supported for*
*blobClobs.*
*16.2.2.1 Query String*
*· none*
*16.2.2.2 Headers*
*· Content-Type: (depends on property type)*
*o eg image/jpeg, image/png, application/pdf*
*· If-Match*
*o timestamp digest*
* obtained from ETag header of representation*
* only validate the request, do not modify the property*
*16.2.2.3 Body*
*· a byte array (for blobs)*
*· a character array (for clobs)*

So our method signature is:

*  public String uploadFile(Clob input) { ....}*

And calling restful description of single entity we get

...

   - "uploadFile": {
      - "id": "uploadFile",
      - "memberType": "action",
      -
      "links": [
         -
         {
            - "rel":
            "urn:org.restfulobjects:rels/details;action=\"uploadFile\"",
            - "href": "
            
http://localhost:8080/restful/objects/ASE_BATCH_JOB/L_2354/actions/uploadFile
            ",
            - "method": "GET",
            - "type":
            
"application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
         }
      ]
   }

...

and  in the next step we have
...

   - {
      - "rel": "urn:org.restfulobjects:rels/invoke;action=\"uploadFile\"",
      - "href": "
      
http://localhost:8080/restful/objects/ASE_BATCH_JOB/L_2354/actions/uploadFile/invoke
      ",
      - "method": "POST",
      - "type":
      
"application/json;profile=\"urn:org.restfulobjects:repr-types/object-action\""
      ,
      -
      "arguments": {
         -
         "clob": {
            - "value": null
         }
      }
   },

...

So we have playing around with executing the methods thru e.g. postman
(chrome app), but with no success.

Here our questions:

1. URL should be something like:
http://localhost:8080/restful/objects/ASE_BATCH_JOB/L_2354/actions/uploadFile/invoke
- this is pretty clear, I think...

2. Should we send PUT or POST Request ?

3. May we define a method with return value, e.g. String, or must be void?

4. Should we annotate our method  with @Action(semantics =
SemanticsOf.NON_IDEMPOTENT) ? Without annotations, Isis proposes the POST

5. We put in request header

Content-Type:text/plain

Should we put something else/more? If-Match element? If yes which value? *

6. How the request body should look like?

6a: raw text ? e.g. ABC

6b: Json clob representation from previous description response
{
"clob": {
"value": "ABC"
}
}

6c: Json value

{
"value": "ABC"
}


Depending on request variants, we get different exceptions. So we are not
sure if we use it wrongly or we have a bug...



Thanks,Vladmir

Reply via email to