REST API设计 - 使用不同参数通过REST获取/发布/放置资源

时间:2017-12-28 10:00:18

标签: rest api url jax-rs url-scheme

我有一个与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

我只是想知道上面的设计是否合适......

所有帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

CRUD(创建,读取,更新,删除)表示要在数据存储库中完成的基本操作。您直接处理记录或数据对象;除了这些操作之外,记录是被动实体。通常它只是数据库表和记录。

另一方面,REST对资源表示进行操作,每个表示由URL标识。这些通常不是数据对象,而是复杂的对象抽象。

例如,资源可以是用户的评论。这不仅意味着“评论”表中的记录,还意味着它与“用户”资源的关系,评论的帖子,或者它回答的另一个评论。

对评论进行操作不是原始的数据库操作,它可能会产生严重的副作用,例如向原始海报发出警报,或重新计算某些类似游戏的“点”,或更新某些“粉丝”。

此外,资源表示包括超文本(检查HATEOAS原则),允许设计人员表达资源之间的关系,或在操作的工作流程中指导REST客户端。

简而言之,CRUD是一组原始操作(主要用于数据库和静态数据存储),而REST是一种非常高级的API风格(主要用于Web服务和其他“实时”系统)。

第一个操纵数据,另一个与工作系统交互。

to Learn more about CRUD

所以从我的角度来看,你是完全正确的!

答案 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.