将restful架构映射到CRUD功能

时间:2012-05-15 14:47:42

标签: web-services rest java-ee-6 restful-architecture

我正在尝试用Java开发我的第一个restful服务,并且在将方法映射到CRUD功能时遇到了一些麻烦。

我的uri结构如下,并映射到基本数据库结构:

  

/数据库/ {架构} / {表} /

     

/ databases是静态的

     

{schema}和{table}是动态的,并对路径参数做出反应

这就是我所拥有的:

Method - URI        - DATA      - Comment
---------------------------------------------------------------------
GET    - /databases - none      - returns a list of databases
POST   - /databases - database1 - creates a database named database1
DELETE - /databases - database1 - deletes the database1 database
PUT    - /databases - daatbase1 - updates database1 

目前在上面的示例中,我将数据库名称作为JSON对象传递。但是,我不确定这是否正确。我应该这样做(使用DELETE方法作为例子):

Method - URI                  - DATA - Comment
---------------------------------------------------------------------
DELETE - /databases/database1 - none - deletes the database with the same name

如果这是正确的方法,我需要传递额外的数据,那么下面的内容是正确的:

Method - URI                  - DATA      - Comment
---------------------------------------------------------------------
DELETE - /databases/database1 - some data - deletes the database with the same name

任何评论都将不胜感激

1 个答案:

答案 0 :(得分:1)

REST是您域中的一个界面。因此,如果您想公开数据库,那么CRUD可能会起作用。但REST还有更多内容(见下文)

REST-afarians将反对您的服务是RESTful,因为如果不符合其中一个关键约束:超媒体约束。但是,如果您将链接添加到您的服务将生成/提供的文档(超媒体)中,则可以解决这个问题。请参阅Hypermedia constrain。在此之后,您的用户将关注链接和表单以更改应用程序中的内容。 (示例中的数据库,表和行):

- GET /database -> List of databases
- GET /database/{name} -> List of tables
- GET /database/{name}/{table}?page=1 -> First set of rows in table XXXXX
- POST /database/{name}/{table} -> Create a record
- PUT /database/{name}/{table}/{PK} -> Update a record
- DELETE /database/{name}/{table}/{PK} -> Send the record to the big PC in the sky..

不要忘记添加链接到您的文档!

将REST用于CRUD有点像把它放在Straitjacket :)中:你的URI可以代表任何概念。因此,如何根据您希望服务或Web应用程序执行的基础资源(功能)尝试公开一些更具创意/丰富的URI。

请看一下这篇精彩的文章: How to GET a Cup of Coffee