2012-05-15 46 views
3

我想在Java中开发我的第一个restful服务,并且在将这些方法映射到CRUD功能时遇到了一些麻烦。将宁静的体系结构映射到CRUD功能

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

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

/数据库是静态

{架构}和{TABLE}是动态的,在path参数反应

这是我有:

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

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.. 

不要忘了添加链接到你的文件!

对RUD使用REST就像是把它放在一个Straitjacket :):你的URI可以表示任何概念。因此,如何尝试根据您希望服务或Web应用程序执行的下属资源(功能)来公开一些更具创造性/丰富的URI。

在看看这篇大文章:How to GET a Cup of Coffee