在RESTful API中,多个小接口还是少一些大接口更好?
我想为移动应用程序创建更好的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}
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
我不是说这是一个好的或坏的方法。这只是执行部分更新的另一种方法
检索部分表示
要检索资源的部分表示,请使用。然后我必须允许空值?如果用户界面想要更改性别,但此时不知道姓名,则应立即发送完整的用户,如果可能,应包含其所有数据。您确实希望发出尽可能少的请求以减少服务器资源。那么我必须允许空值吗?如果用户界面想要更改性别,但此时不知道姓名,则应立即发送完整的用户,如果可能,应包含其所有数据。您确实希望发出尽可能少的请求以减少服务器资源。