在RESTful API中,多个小接口还是少一些大接口更好?

在RESTful API中,多个小接口还是少一些大接口更好?,rest,restful-architecture,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}

我想为移动应用程序创建更好的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}
一方面,移动应用程序只发送更改的值,而不发送用户模型。但另一方面,我有许多方法具有几乎相同的业务逻辑和更多的维护


有最佳实践方法吗?

通常,web界面应该是粗大的,而不是健谈的,因此您可能应该立即发布整个用户。这一点在

中也有提到,通常一个web界面应该是厚重的,而不是闲聊的,因此您可能应该立即发布整个用户。这也在REST参考资料中提到 REST的关键概念是资源。这就是Roy T.Fielding在他的博士论文中定义资源的方式(论文中没有重点介绍):

REST中信息的关键抽象是资源任何可以命名的信息都可以是资源:文档或图像、临时服务(如“今天的洛杉矶天气”)、其他资源的集合、非虚拟对象(如人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体

[……]

REST使用资源标识符来标识组件之间交互所涉及的特定资源。[…]

资源必须至少有一个URI才能标识它。URI是资源的名称和地址。从概念上讲,您有一个用户资源,因此需要一个URI。因此,必须采用以下方法:

GET/users#所有用户的列表
发布/用户#创建新用户
放置/用户#更新大量用户
GET/users/{id}#一个特殊用户
PUT/users/{id}#更新特殊用户
当您拥有用户资源时,以下内容毫无意义:

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
我不是说这是一个好的或坏的方法。这只是执行部分更新的另一种方法

检索部分表示 要检索资源的部分表示,请使用。

REST资源 REST的关键概念是资源。这就是Roy T.Fielding在他的博士论文中定义资源的方式(论文中没有重点介绍):

REST中信息的关键抽象是资源任何可以命名的信息都可以是资源:文档或图像、临时服务(如“今天的洛杉矶天气”)、其他资源的集合、非虚拟对象(如人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体

[……]

REST使用资源标识符来标识组件之间交互所涉及的特定资源。[…]

资源必须至少有一个URI才能标识它。URI是资源的名称和地址。从概念上讲,您有一个用户资源,因此需要一个URI。因此,必须采用以下方法:

GET/users#所有用户的列表
发布/用户#创建新用户
放置/用户#更新大量用户
GET/users/{id}#一个特殊用户
PUT/users/{id}#更新特殊用户
当您拥有用户资源时,以下内容毫无意义:

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
我不是说这是一个好的或坏的方法。这只是执行部分更新的另一种方法

检索部分表示
要检索资源的部分表示,请使用。

然后我必须允许空值?如果用户界面想要更改性别,但此时不知道姓名,则应立即发送完整的用户,如果可能,应包含其所有数据。您确实希望发出尽可能少的请求以减少服务器资源。那么我必须允许空值吗?如果用户界面想要更改性别,但此时不知道姓名,则应立即发送完整的用户,如果可能,应包含其所有数据。您确实希望发出尽可能少的请求以减少服务器资源。