REST服务中的资源应该是什么样的?

时间:2016-05-17 15:26:41

标签: web-services rest

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

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

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

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

http://localhost:8080/rest/application

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

在此关键字的基础上,我们将调用适当的方法并返回响应。

这是正确的方法吗?如果没有原因?

1 个答案:

答案 0 :(得分:2)

这不是REST应用程序应该如何。请参阅下面的详细信息。

REST资源

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

此架构的关键概念是资源。请参阅Fielding的论文中的以下引用:

  

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}