Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REST API任务(非CRUD)的最佳实践_Api_Rest_Crud - Fatal编程技术网

REST API任务(非CRUD)的最佳实践

REST API任务(非CRUD)的最佳实践,api,rest,crud,Api,Rest,Crud,我正在实现一个RESTAPI,并希望输入不严格符合CRUD模型的方法。以下是一个通用示例: 我将一个“狗”对象发布到我的“狗”收藏中。 我给这只新狗(狗/1)贴了一个项圈。 我现在想让狗滚过去 假设“翻滚”是一次性任务,不会改变狗的状态,您将如何实现这一点?我有以下想法: 备选案文1: POST dogs/1 { task: "roll over" } 备选案文2: POST tasks/ { task: "roll over" id: 1

我正在实现一个RESTAPI,并希望输入不严格符合CRUD模型的方法。以下是一个通用示例:

我将一个“狗”对象发布到我的“狗”收藏中。 我给这只新狗(狗/1)贴了一个项圈。 我现在想让狗滚过去

假设“翻滚”是一次性任务,不会改变狗的状态,您将如何实现这一点?我有以下想法:

备选案文1:

POST dogs/1
{
  task: "roll over" 
}
备选案文2:

POST tasks/
{
  task: "roll over"
  id: 1
}
备选案文3:

GET dogs/1/rollOver
假设“翻滚”是一次性任务,不会改变狗的状态,您将如何实现这一点

简短答复:

POST /tasks

{
    "task": "roll over",
    "id": "/dogs/1"
}
更详细的回答:REST的一个重要约束是统一接口,它包括这样一个事实:对于任何地方的所有资源,自描述消息的语义都是相同的

GET
是一种糟糕的“启动任务”的方式,因为GET的语义是有效的只读的,这意味着任何地方的任何人都可以随时请求该资源的表示。考虑一下浏览器预先获取任务链接以节省时间,或者使用web爬虫添加任务资源以编制索引

这就留下了一个选择

POST /dogs/1
POST /tasks

现在,由于POST是一种不安全的方法,有一个有趣的缓存皱纹需要考虑。对不安全请求的无错误响应将使用目标资源的缓存表示

通常,如果您正在对资源进行更改(例如:PUT/foo),这正是您想要的

但是在这里,听起来“翻滚”任务不应该改变
/dogs/1
的表示形式。如果该资源的表示形式不会改变,那么我不想使其无效,而是将请求指向其他资源

当然,拼写
/tasks
并没有什么特别神奇的地方。它也可以是
/dogs/1/tasks
,或者
/tasks/dogs/1
或者
/dogs/1/rollOver
或者
/b79d1e50-44eb-4c51-bfc6-ef0d94c15fdc