我有一个与RESTful api设计相关的问题。 我有一个RESTful api到GET / POST / PUT资源(用户)。我不太清楚我的设计是否正确
这是一个例子
/users:
get:
queryParameters:
joinDate:
displayName: get all used based on join date
post:
displayName: Add new user
/{lastName}:
get:
displayName: Get all users based on last name
/{id}:
put:
displayName: Update a particular user
我只是想知道上面的设计是否合适......
所有帮助表示赞赏!
答案 0 :(得分:0)
CRUD(创建,读取,更新,删除)表示要在数据存储库中完成的基本操作。您直接处理记录或数据对象;除了这些操作之外,记录是被动实体。通常它只是数据库表和记录。
另一方面,REST对资源表示进行操作,每个表示由URL标识。这些通常不是数据对象,而是复杂的对象抽象。例如,资源可以是用户的评论。这不仅意味着“评论”表中的记录,还意味着它与“用户”资源的关系,评论的帖子,或者它回答的另一个评论。
对评论进行操作不是原始的数据库操作,它可能会产生严重的副作用,例如向原始海报发出警报,或重新计算某些类似游戏的“点”,或更新某些“粉丝”。
此外,资源表示包括超文本(检查HATEOAS原则),允许设计人员表达资源之间的关系,或在操作的工作流程中指导REST客户端。
简而言之,CRUD是一组原始操作(主要用于数据库和静态数据存储),而REST是一种非常高级的API风格(主要用于Web服务和其他“实时”系统)。
第一个操纵数据,另一个与工作系统交互。
所以从我的角度来看,你是完全正确的!
答案 1 :(得分:0)
我会这样做。
POST /users
Creates a single user
GET /users
Reads all users
GET /users;joinDate=yyyy-MM-dd
Reads all users whose join date matches to given
GET /users;joinDate=yyyy-MM-dd;lastName=Some
Reads all users whose join date matches to given
and whose last name matches to given
GET /users/{userId}
Reads a user whose {id} matches to given
GET /users;joinDate=yyyy-MM-dd/{userId}
Reads a user whose id matches to given
among those who joined on specified day.