You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@isis.apache.org by Hiruni Madola <hi...@gmail.com> on 2015/04/09 11:53:22 UTC

Invoking Isis REST Api with arguments

Hi All,

I have a question about passing arguments when invoking a REST endpoint in
Apache Isis.

In my sample service I have a method to echo the parameter I pass to it.

public String echoParam(String param)
{
return "echo "+param ;
}

I invoke this using curl as  :
curl -X POST -u sven:pass
http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello

I cannot get the desire result and I get below as the response;

{"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found but
no such parameter"}

Can you please advice on how to pass an argument to the REST service
endpoint when invoking via a REST client?

Regards,
Hiruni

Re: Invoking Isis REST Api with arguments

Posted by Hiruni Madola <hi...@gmail.com>.
Hi Martin, Dan,

Thank you very much for the detailed explainations. Thanks for the screen
cast link :)

Regards,
Hiruni

On Fri, Apr 10, 2015 at 1:02 AM, Dan Haywood <da...@haywood-associates.co.uk>
wrote:

> Hi Hiruni,
>
> This info is documented in the RO spec [1] (section 2.9), but we get quite
> a few people asking similar questions so I guess I didn't write that
> section clearly enough....
>
> As I think you've figured out, actions can be invoked either by GET, PUT or
> POST; this is dependent on their @Action(semantics=...) of SAFE, IDEMPOTENT
> and NON_IDEMPOTENT respectively.
>
> In the case of GET, the arguments are part of the URL.  This can either be
> in a simplified format (as in your example, sect 2.9.1 or RO spec), or in
> an encoded string (2.10)
>
> In the case of PUT and POST, the arguments are part of the body (also
> documented in 2.10).
>
> So, your issue is that you've combined the two options, which isn't gonna
> work.
>
> ~~~
> While I was drafting this reply Martin also posted a reply; I think his
> example is almost right, except that instead of -X GET it should be -X
> POST.
>
> This screencast I did a while ago [2] might also help.
>
> Cheers
> Dan
>
>
>
> [1] http://restfulobjects.org/
> [2] https://www.youtube.com/watch?v=_-TOvVYWCHc
>
>
> On 9 April 2015 at 20:24, Martin Grigorov <mg...@apache.org> wrote:
>
> > Hi,
> >
> > I think you have to send the parameter as a JSON body.
> > Something like:
> > curl -H "Content-Type: application/json" -X GET -d '{"param": {"value":
> > "hello"}}'
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> >
> > Check:
> >
> >
> http://isis.apache.org/components/viewers/restfulobjects/using-chrome-tools.html
> >
> > Martin Grigorov
> > Freelancer, available for hire!
> > Wicket Training and Consulting
> > https://twitter.com/mtgrigorov
> >
> > On Thu, Apr 9, 2015 at 10:01 PM, Hiruni Madola <hi...@gmail.com>
> > wrote:
> >
> > > Hi Everyone,
> > >
> > > I tried different ways of calling the REST end point passing arguments
> > with
> > > curl.
> > >
> > > eg : curl -X POST -u sven:pass -d "param=hello"
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> > > <
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > > >
> > >
> > > But I still get the same error response
> > > : {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param'
> found
> > > but no such parameter"}
> > >
> > > Although the error response states there is no such parameter, in my
> > > Service method I have defined the parameter as properly.
> > >
> > > I might be overlooking some basics here.
> > > But can someone please give me a hint what I may have done wrong?
> > >
> > > Or is this an inherent issue with argument passing in Apache Isis Rest
> > API?
> > > Any help is much appreciated.
> > >
> > > Regards,
> > > Hiruni
> > >
> > >
> > >
> > >
> > > On Thu, Apr 9, 2015 at 3:23 PM, Hiruni Madola <hi...@gmail.com>
> > > wrote:
> > >
> > > > Hi All,
> > > >
> > > > I have a question about passing arguments when invoking a REST
> endpoint
> > > in
> > > > Apache Isis.
> > > >
> > > > In my sample service I have a method to echo the parameter I pass to
> > it.
> > > >
> > > > public String echoParam(String param)
> > > > {
> > > > return "echo "+param ;
> > > > }
> > > >
> > > > I invoke this using curl as  :
> > > > curl -X POST -u sven:pass
> > > >
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > > >
> > > > I cannot get the desire result and I get below as the response;
> > > >
> > > > {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param'
> found
> > > > but no such parameter"}
> > > >
> > > > Can you please advice on how to pass an argument to the REST service
> > > > endpoint when invoking via a REST client?
> > > >
> > > > Regards,
> > > > Hiruni
> > > >
> > > >
> > >
> > >
> > > --
> > > Hiru
> > >
> >
>



-- 
Hiru

Re: Invoking Isis REST Api with arguments

Posted by Martin Grigorov <mg...@apache.org>.
On Thu, Apr 9, 2015 at 10:32 PM, Dan Haywood <da...@haywood-associates.co.uk>
wrote:

> Hi Hiruni,
>
> This info is documented in the RO spec [1] (section 2.9), but we get quite
> a few people asking similar questions so I guess I didn't write that
> section clearly enough....
>
> As I think you've figured out, actions can be invoked either by GET, PUT or
> POST; this is dependent on their @Action(semantics=...) of SAFE, IDEMPOTENT
> and NON_IDEMPOTENT respectively.
>
> In the case of GET, the arguments are part of the URL.  This can either be
> in a simplified format (as in your example, sect 2.9.1 or RO spec), or in
> an encoded string (2.10)
>
> In the case of PUT and POST, the arguments are part of the body (also
> documented in 2.10).
>
> So, your issue is that you've combined the two options, which isn't gonna
> work.
>
> ~~~
> While I was drafting this reply Martin also posted a reply; I think his
> example is almost right, except that instead of -X GET it should be -X
> POST.
>

Heh.
I've changed my mind in the last second before sending the mail.
Now I know how this works!
Thanks Dan!


>
> This screencast I did a while ago [2] might also help.
>
> Cheers
> Dan
>
>
>
> [1] http://restfulobjects.org/
> [2] https://www.youtube.com/watch?v=_-TOvVYWCHc
>
>
> On 9 April 2015 at 20:24, Martin Grigorov <mg...@apache.org> wrote:
>
> > Hi,
> >
> > I think you have to send the parameter as a JSON body.
> > Something like:
> > curl -H "Content-Type: application/json" -X GET -d '{"param": {"value":
> > "hello"}}'
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> >
> > Check:
> >
> >
> http://isis.apache.org/components/viewers/restfulobjects/using-chrome-tools.html
> >
> > Martin Grigorov
> > Freelancer, available for hire!
> > Wicket Training and Consulting
> > https://twitter.com/mtgrigorov
> >
> > On Thu, Apr 9, 2015 at 10:01 PM, Hiruni Madola <hi...@gmail.com>
> > wrote:
> >
> > > Hi Everyone,
> > >
> > > I tried different ways of calling the REST end point passing arguments
> > with
> > > curl.
> > >
> > > eg : curl -X POST -u sven:pass -d "param=hello"
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> > > <
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > > >
> > >
> > > But I still get the same error response
> > > : {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param'
> found
> > > but no such parameter"}
> > >
> > > Although the error response states there is no such parameter, in my
> > > Service method I have defined the parameter as properly.
> > >
> > > I might be overlooking some basics here.
> > > But can someone please give me a hint what I may have done wrong?
> > >
> > > Or is this an inherent issue with argument passing in Apache Isis Rest
> > API?
> > > Any help is much appreciated.
> > >
> > > Regards,
> > > Hiruni
> > >
> > >
> > >
> > >
> > > On Thu, Apr 9, 2015 at 3:23 PM, Hiruni Madola <hi...@gmail.com>
> > > wrote:
> > >
> > > > Hi All,
> > > >
> > > > I have a question about passing arguments when invoking a REST
> endpoint
> > > in
> > > > Apache Isis.
> > > >
> > > > In my sample service I have a method to echo the parameter I pass to
> > it.
> > > >
> > > > public String echoParam(String param)
> > > > {
> > > > return "echo "+param ;
> > > > }
> > > >
> > > > I invoke this using curl as  :
> > > > curl -X POST -u sven:pass
> > > >
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > > >
> > > > I cannot get the desire result and I get below as the response;
> > > >
> > > > {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param'
> found
> > > > but no such parameter"}
> > > >
> > > > Can you please advice on how to pass an argument to the REST service
> > > > endpoint when invoking via a REST client?
> > > >
> > > > Regards,
> > > > Hiruni
> > > >
> > > >
> > >
> > >
> > > --
> > > Hiru
> > >
> >
>

Re: Invoking Isis REST Api with arguments

Posted by Dan Haywood <da...@haywood-associates.co.uk>.
Hi Hiruni,

This info is documented in the RO spec [1] (section 2.9), but we get quite
a few people asking similar questions so I guess I didn't write that
section clearly enough....

As I think you've figured out, actions can be invoked either by GET, PUT or
POST; this is dependent on their @Action(semantics=...) of SAFE, IDEMPOTENT
and NON_IDEMPOTENT respectively.

In the case of GET, the arguments are part of the URL.  This can either be
in a simplified format (as in your example, sect 2.9.1 or RO spec), or in
an encoded string (2.10)

In the case of PUT and POST, the arguments are part of the body (also
documented in 2.10).

So, your issue is that you've combined the two options, which isn't gonna
work.

~~~
While I was drafting this reply Martin also posted a reply; I think his
example is almost right, except that instead of -X GET it should be -X POST.

This screencast I did a while ago [2] might also help.

Cheers
Dan



[1] http://restfulobjects.org/
[2] https://www.youtube.com/watch?v=_-TOvVYWCHc


On 9 April 2015 at 20:24, Martin Grigorov <mg...@apache.org> wrote:

> Hi,
>
> I think you have to send the parameter as a JSON body.
> Something like:
> curl -H "Content-Type: application/json" -X GET -d '{"param": {"value":
> "hello"}}'
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
>
> Check:
>
> http://isis.apache.org/components/viewers/restfulobjects/using-chrome-tools.html
>
> Martin Grigorov
> Freelancer, available for hire!
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Thu, Apr 9, 2015 at 10:01 PM, Hiruni Madola <hi...@gmail.com>
> wrote:
>
> > Hi Everyone,
> >
> > I tried different ways of calling the REST end point passing arguments
> with
> > curl.
> >
> > eg : curl -X POST -u sven:pass -d "param=hello"
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> > <
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > >
> >
> > But I still get the same error response
> > : {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
> > but no such parameter"}
> >
> > Although the error response states there is no such parameter, in my
> > Service method I have defined the parameter as properly.
> >
> > I might be overlooking some basics here.
> > But can someone please give me a hint what I may have done wrong?
> >
> > Or is this an inherent issue with argument passing in Apache Isis Rest
> API?
> > Any help is much appreciated.
> >
> > Regards,
> > Hiruni
> >
> >
> >
> >
> > On Thu, Apr 9, 2015 at 3:23 PM, Hiruni Madola <hi...@gmail.com>
> > wrote:
> >
> > > Hi All,
> > >
> > > I have a question about passing arguments when invoking a REST endpoint
> > in
> > > Apache Isis.
> > >
> > > In my sample service I have a method to echo the parameter I pass to
> it.
> > >
> > > public String echoParam(String param)
> > > {
> > > return "echo "+param ;
> > > }
> > >
> > > I invoke this using curl as  :
> > > curl -X POST -u sven:pass
> > >
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> > >
> > > I cannot get the desire result and I get below as the response;
> > >
> > > {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
> > > but no such parameter"}
> > >
> > > Can you please advice on how to pass an argument to the REST service
> > > endpoint when invoking via a REST client?
> > >
> > > Regards,
> > > Hiruni
> > >
> > >
> >
> >
> > --
> > Hiru
> >
>

Re: Invoking Isis REST Api with arguments

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

I think you have to send the parameter as a JSON body.
Something like:
curl -H "Content-Type: application/json" -X GET -d '{"param": {"value":
"hello"}}'
http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke

Check:
http://isis.apache.org/components/viewers/restfulobjects/using-chrome-tools.html

Martin Grigorov
Freelancer, available for hire!
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Thu, Apr 9, 2015 at 10:01 PM, Hiruni Madola <hi...@gmail.com>
wrote:

> Hi Everyone,
>
> I tried different ways of calling the REST end point passing arguments with
> curl.
>
> eg : curl -X POST -u sven:pass -d "param=hello"
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
> <
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> >
>
> But I still get the same error response
> : {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
> but no such parameter"}
>
> Although the error response states there is no such parameter, in my
> Service method I have defined the parameter as properly.
>
> I might be overlooking some basics here.
> But can someone please give me a hint what I may have done wrong?
>
> Or is this an inherent issue with argument passing in Apache Isis Rest API?
> Any help is much appreciated.
>
> Regards,
> Hiruni
>
>
>
>
> On Thu, Apr 9, 2015 at 3:23 PM, Hiruni Madola <hi...@gmail.com>
> wrote:
>
> > Hi All,
> >
> > I have a question about passing arguments when invoking a REST endpoint
> in
> > Apache Isis.
> >
> > In my sample service I have a method to echo the parameter I pass to it.
> >
> > public String echoParam(String param)
> > {
> > return "echo "+param ;
> > }
> >
> > I invoke this using curl as  :
> > curl -X POST -u sven:pass
> >
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
> >
> > I cannot get the desire result and I get below as the response;
> >
> > {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
> > but no such parameter"}
> >
> > Can you please advice on how to pass an argument to the REST service
> > endpoint when invoking via a REST client?
> >
> > Regards,
> > Hiruni
> >
> >
>
>
> --
> Hiru
>

Re: Invoking Isis REST Api with arguments

Posted by Hiruni Madola <hi...@gmail.com>.
Hi Everyone,

I tried different ways of calling the REST end point passing arguments with
curl.

eg : curl -X POST -u sven:pass -d "param=hello"
http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke
<http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello>

But I still get the same error response
: {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
but no such parameter"}

Although the error response states there is no such parameter, in my
Service method I have defined the parameter as properly.

I might be overlooking some basics here.
But can someone please give me a hint what I may have done wrong?

Or is this an inherent issue with argument passing in Apache Isis Rest API?
Any help is much appreciated.

Regards,
Hiruni




On Thu, Apr 9, 2015 at 3:23 PM, Hiruni Madola <hi...@gmail.com>
wrote:

> Hi All,
>
> I have a question about passing arguments when invoking a REST endpoint in
> Apache Isis.
>
> In my sample service I have a method to echo the parameter I pass to it.
>
> public String echoParam(String param)
> {
> return "echo "+param ;
> }
>
> I invoke this using curl as  :
> curl -X POST -u sven:pass
> http://localhost:8080/restful/services/EchoService/actions/echoParam/invoke?param=hello
>
> I cannot get the desire result and I get below as the response;
>
> {"param":{"value":"hello"},"x-ro-invalidReason":"Argument 'param' found
> but no such parameter"}
>
> Can you please advice on how to pass an argument to the REST service
> endpoint when invoking via a REST client?
>
> Regards,
> Hiruni
>
>


-- 
Hiru