根据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方法更适合发送请求进行某些操作(例如短信发送)。
答案 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