我正在开发基于REST服务的应用程序。我已经阅读了有关开发REST Web服务的所有内容,但有一点令我感到困惑。在我阅读时,所有模块或功能必须具有唯一且有意义的资源名称,如
http://localhost:8080/rest/create-organization
和
http://localhost:8080/rest/add-employee
但我的一位同事建议我,我们应该只有一个资源作为所有模块的单一登陆点,我们必须在请求标头中发送一些代码来识别我们想要执行的功能。例如:
http://localhost:8080/rest/application
并且,在请求标头中,我们应该为创建组织添加CRTORG
参数,为添加员工添加ADDEMP
。
在此关键字的基础上,我们将调用适当的方法并返回响应。
这是正确的方法吗?如果没有原因?
答案 0 :(得分:2)
这不是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可以具有以下端点和操作:
创建组织(在请求有效负载中发送资源表示)
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}