RESTful API中有哪些更好的小接口或更小的接口?

时间:2016-07-19 08:18:14

标签: rest restful-architecture

我想为移动应用程序创建更好的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}

一方面,移动应用程序仅发送更改的值而不是空洞用户模型。但另一方面,我有很多方法,几乎​​相同的业务逻辑和更多的维护。

是否有最佳做法?

2 个答案:

答案 0 :(得分:3)

REST资源

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

中也提到了这一点