REST API GET方法

时间:2015-02-23 12:33:26

标签: api rest get

根据REST API设计建议,按ID获取用户必须

GET /users/{id}

如何通过唯一的电话号码获取用户?

GET /users/phone/{number}

GET /users/?phone=xxxxxxxxxxx

GET /phones/{number}/users

或其他什么?

或者例如获取有限制的最后一个用户评论:

/users/{id}/comments/limit/{limit}

/users/{id}/comments/?limit='xx'

在这种情况下有限制或推荐吗?

哪种HTTP方法更适合发送请求进行某些操作(例如短信发送)。

1 个答案:

答案 0 :(得分:1)

你的问题有很多不同的方面,所以我选择一些,希望答案对你有所帮助。

一般来说,URI是某个 ressource 的唯一标识符。此外,“好的REST-API URI”只包含名词(用于'命名'资源),而不包含动词(应该用资源做什么)。 URI参数可用于参数化资源表示,例如,排序或过滤。

在您的示例中,

  

/用户/ {ID} /?极限= 'XX'

是获取某些子资源列表(可能是用户注释)的有效方法,但是URI中没有任何内容引用特定属性或子资源(例如注释)。

更有意义的资源URI将是

  

/ useres / {ID} /的评论/ 最大= 100安培;排序= ASC

在这种情况下,第一部分(users / {id} / comments / )标识ressource,而params用于参数化其表示。 正确的URI不依赖URI参数来唯一标识资源。

可以类似地处理URI中的过滤条件。您可以将它们放在参数中,但这可能会导致多个和/或复杂过滤器出现问题,例如:

  

GET   ?/ useres /电话= 1234&安培; phonemode = startswith&安培;名称= FOO&安培; namemode =包含

执行此操作的一种方法是创建过滤器(可能只是暂时),然后使用后续GET请求检索过滤后的信息,如下所示:

POST /users/filter
   name='mycomplexfilter'
   poperty='name'
   value='foo'
   mode='contains'        

GET /useres/filter/mycomplexfilter

希望这有助于阐明这个话题

[编辑] 有关常用HTTP方法(又名动词)的说明,请参阅此摘要:Which HTTP methods match up to which CRUD methods?

See this question获得类似答案。

应使用POST(例如,对于资源URI /通知)请求有效负载中的文本和收件人发起服务器发送通知(可能通过SMS)。 HTTP标头可用于指示所需的通知类型,而HTTP状态代码表示发送尝试成功。状态代码201表示成功发送消息,还返回新创建的资源的URI。

客户请求

POST /notifications

recipient="+0049123456789"
text="this is the SMS text"

服务器响应:

201 - Created
Location: /notifications/9876