Passing array in GET for a REST call

前端 未结 6 1504
清歌不尽
清歌不尽 2020-12-13 16:56

I have a url to fetch appointments for a user like this:

/user/:userId/appointments

How should the url look like if I want to get appointme

相关标签:
6条回答
  • 2020-12-13 17:25

    Collections are a resource so /appointments is fine as the resource.

    Collections also typically offer filters via the querystring which is essentially what users=id1,id2... is.

    So,

    /appointments?users=id1,id2 
    

    is fine as a filtered RESTful resource.

    0 讨论(0)
  • 2020-12-13 17:28

    I think it's a better practice to serialize your REST call parameters, usually by JSON-encoding them:

    /appointments?users=[id1,id2]
    

    or even:

    /appointments?params={users:[id1,id2]}
    

    Then you un-encode them on the server. This is going to give you more flexibility in the long run.

    Just make sure to URLEncode the params as well before you send them!

    0 讨论(0)
  • 2020-12-13 17:35
    /appointments?users=1d1,1d2.. 
    

    is fine. It's pretty much your only sensible option since you can't pass in a body with a GET.

    0 讨论(0)
  • 2020-12-13 17:40

    Instead of using http GET, use http POST. And JSON. Or XML

    This is how your request stream to the server would look like.

    POST /appointments HTTP/1.0
    Content-Type: application/json
    Content-Length: (calculated by your utility)
    
    {users: [user:{id:id1}, user:{id:id2}]}
    

    Or in XML,

    POST /appointments HTTP/1.0
    Content-Type: application/json
    Content-Length: (calculated by your utility)
    
    <users><user id='id1'/><user id='id2'/></users>
    

    You could certainly continue using GET as you have proposed, as it is certainly simpler.

    /appointments?users=1d1,1d2
    

    Which means you would have to keep your data structures very simple.

    However, if/when your data structure gets more complex, http GET and without JSON, your programming and ability to recognise the data gets very difficult.

    Therefore,unless you could keep your data structure simple, I urge you adopt a data transfer framework. If your requests are browser based, the industry usual practice is JSON. If your requests are server-server, than XML is the most convenient framework.

    JQuery

    If your client is a browser and you are not using GWT, you should consider using jquery REST. Google on RESTful services with jQuery.

    0 讨论(0)
  • 2020-12-13 17:41

    Another way of doing that, which can make sense depending on your server architecture/framework of choice, is to repeat the same argument over and over again. Something like this:

    /appointments?users=id1&users=id2
    

    In this case I recommend using the parameter name in singular:

    /appointments?user=id1&user=id2
    

    This is supported natively by frameworks such as Jersey (for Java). Take a look on this question for more details.

    0 讨论(0)
  • 2020-12-13 17:48

    This worked for me.

    /users?ids[]=id1&ids[]=id2
    
    0 讨论(0)
提交回复
热议问题