【问题标题】:REST API DESIGN - Get/Post/Put a resource through REST with different parametersREST API 设计 - 通过具有不同参数的 REST 获取/发布/放置资源
【发布时间】:2017-12-28 10:00:17
【问题描述】:

我有一个关于 RESTful api 设计的问题。 我有一个 RESTful api 来获取/发布/放置资源(用户)。我不太清楚我的设计是否正确

这是一个例子

/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

我只是想知道上面的设计好不好..

感谢所有帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    对评论进行操作不是原始的数据库操作,它可能会产生显着的副作用,例如向原始发布者发出警报,或重新计算一些类似游戏的“点数”,或更新一些“关注者流”。

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

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

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

    to Learn more about CRUD

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

    【讨论】:

    • 谢谢卡里姆。
    • 谢谢卡里姆。如果有 2 个路径 /{lastName}: 和 /{id}: 在 1 个资源用户下,我的工具会抱怨,因为当请求到达时,服务器不知道它应该将请求重定向到哪个路径我正在移动 put资源路径下的方法如下,希望这是正确的吗? /users: get: queryParameters: joinDate: displayName: 根据加入日期获取所有用户 post: displayName: 添加新用户 put: displayName: 更新特定用户 /{lastName}: get: displayName: 根据姓氏获取所有用户
    【解决方案2】:

    我愿意这样做。

    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.
    

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多