【问题标题】:What should resources in a REST service be like?REST 服务中的资源应该是什么样的?
【发布时间】:2016-05-17 15:26:41
【问题描述】:

我正在开发一个基于 REST 服务的应用程序。我已经阅读了有关开发 REST Web 服务的所有内容,但有一件事让我感到困惑。正如我所读到的,所有模块或功能都必须具有唯一且有意义的资源名称,例如

http://localhost:8080/rest/create-organization

http://localhost:8080/rest/add-employee

但是我的一位同事建议我,我们应该只有一个资源作为所有模块的单一着陆点,并且我们必须在请求标头中发送一些代码来识别我们想要执行的功能。例如:

http://localhost:8080/rest/application

并且,在请求头中,我们应该添加CRTORG 参数用于创建组织,ADDEMP 用于添加员工。

根据这个关键字,我们将调用适当的方法并返回响应。

这是正确的方法吗?如果没有,为什么?

【问题讨论】:

    标签: web-services rest


    【解决方案1】:

    这不是 REST 应用程序应有的样子。请参阅下面的更多详细信息。

    REST 资源

    REST 代表 Representational State Transfer,此架构由 Roy Thomas Fielding 在chapter 5 of his dissertation 中定义。

    此架构的关键概念是资源。请参阅菲尔丁论文中的以下引述:

    5.2.1.1 Resources and Resource Identifiers

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

    REST 是独立于协议的,当通过 HTTP 协议实现时,可以使用 HTTP 动词来操作资源,并且资源由它们的 URI 标识。同一个资源可以有不同的表现形式,比如 JSON 和 XML。

    有关资源和资源表示的更多详细信息,请参阅answer

    您的 API 可能是什么样的

    您的 API 可能具有以下端点和操作:

    • 创建一个组织(在请求负载中发送资源表示)

      POST /api/organizations
      
    • 获取所有组织

      GET /api/organizations
      
    • 使用特定标识符获取组织

      GET /api/organizations/{organizationId}
      
    • 使用特定标识符替换组织(在请求负载中发送资源表示)

      PUT /api/organizations/{organizationId}
      
    • 使用特定标识符删除组织

      DELETE /api/organizations/{organizationId}
      
    • 为组织创建员工(在请求负载中发送资源表示)

      POST /api/organizations/{organizationId}/employees
      
    • 获取组织的所有员工

      GET /api/organizations/{organizationId}/employees
      
    • 为组织获取员工

      GET /api/organizations/{organizationId}/employees/{employeeId}
      
    • 替换组织的员工(在请求负载中发送资源表示)

      PUT /api/organizations/{organizationId}/employees/{employeeId}
      
    • 从组织中删除员工

      DELETE /api/organizations/{organizationId}/employees/{employeeId}
      

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2016-03-02
      • 2013-04-25
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多