我正在尝试用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
任何评论都将不胜感激
答案 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