我想为移动应用程序创建更好的RESTful API。一个简单的例子:
user model:
- firstname
- lastname
- gender
services:
GET /users => list of all users
POST /users => create a new user
PUT /users => update a bulk of users
GET /users/{id} => one special users
PUT /users/{id} => update a special user
最好像这样创建小型接口,而不是PUT /users/{id}
?:
PUT /usersFirstname/{id}
PUT /usersLastname/{id}
PUT /usersGender/{id}
一方面,移动应用程序仅发送更改的值而不是空洞用户模型。但另一方面,我有很多方法,几乎相同的业务逻辑和更多的维护。
是否有最佳做法?
答案 0 :(得分:3)
REST的关键概念是资源。这就是Roy T. Fielding在博士论文chapter 5中定义资源的方法(论文中没有重点介绍):
5.2.1.1 Resources and Resource Identifiers
REST中信息的关键抽象是一种资源。 任何可以命名的信息都可以是资源:文档或图像,临时服务(例如“洛杉矶今天的天气”),其他资源的集合,非虚拟对象(例如一个人),等等。换句话说,任何可能是作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。
[...]
REST使用资源标识符来标识组件之间交互所涉及的特定资源。 [...]
资源必须具有至少一个URI 才能识别它。 URI是资源的名称和地址。从概念上讲,您有一个用户资源,因此您需要一个URI。所以必须采取以下方法:
GET /users # list of all users
POST /users # create a new user
PUT /users # update a bulk of users
GET /users/{id} # one special users
PUT /users/{id} # update a special user
当您拥有用户资源时,以下内容毫无意义:
PUT /usersFirstname/{id}
PUT /usersLastname/{id}
PUT /usersGender/{id}
要处理部分更新,请使用PATCH
HTTP谓词。应使用PUT
HTTP谓词用新表示替换整个资源。
对于部分更新,某些方法将主资源的字段视为子资源。然后PUT
可用于用新表示替换子资源。类似的东西:
PUT /users/{id}/firstname
PUT /users/{id}/lastname
PUT /users/{id}/gender
我不是说这是好的或坏方法。这只是另一种方法来执行部分更新。
要检索资源的部分表示,请使用content negotiation or a query string parameter to filter the fields。
答案 1 :(得分:1)
通常一个网页界面应该很粗俗而不是健谈,因此你应该立刻发布整个用户。 Microsoft API implementation guidance
中也提到了这一点