Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/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的初始化和存在终结点 要求 检查报告是否存在的方法 初始化新报表的方法(客户端不知道表示) 获取报告的方法_Rest_Api_Http - Fatal编程技术网

Rest API的初始化和存在终结点 要求 检查报告是否存在的方法 初始化新报表的方法(客户端不知道表示) 获取报告的方法

Rest API的初始化和存在终结点 要求 检查报告是否存在的方法 初始化新报表的方法(客户端不知道表示) 获取报告的方法,rest,api,http,Rest,Api,Http,注意:报告存在或不存在,并且从来没有超过一个 想法1 GET/account/{id}/report 404如果报告不存在 200如果报告确实存在 但是如何初始化呢POSTing或PUTting一个空的主体到端点似乎是错误的(POST,因为我们知道资源在哪里;PUT,因为我们不想什么都不在那里),但也许那只是我。另一种方法可能是GET/account/{id}/report/init 想法2 GET/account/{id}/report 200如果报告存在;返回报告 200如果报告

注意:报告存在或不存在,并且从来没有超过一个

想法1
  • GET/account/{id}/report
    • 404
      如果报告不存在
    • 200
      如果报告确实存在
但是如何初始化呢
POST
ing或
PUT
ting一个空的主体到端点似乎是错误的(
POST
,因为我们知道资源在哪里;
PUT
,因为我们不想什么都不在那里),但也许那只是我。另一种方法可能是
GET/account/{id}/report/init

想法2
  • GET/account/{id}/report
    • 200
      如果报告存在;返回报告
    • 200
      如果报告不存在;初始化并返回报告
但如何检查报告是否存在

问题: 我的两种方法在不同方面都有不足之处。在遵守REST原则的同时满足要求的适当方法是什么

在遵守REST原则的同时满足要求的适当方法是什么

REST不关心资源标识符的拼写

有两件事你应该记住。首先,的参考应用程序是万维网,它只与GET和POST相处得很好。第二,这是这个故事的一个重要部分

在HTTP中,当服务器响应一个不安全的请求返回一个非错误状态代码时,这是对客户端(和任何中间组件)的一条隐式指令,以前缓存的表示应该失效

因此,我们通常希望将编辑安排为对最重要资源的不安全请求,如果更改成功,则需要刷新这些请求

那么,如果我想获取一份报告及其元数据

GET /A3E7205B-6DC6-4685-9133-2759F739BC22
如果我希望元数据不包含报表本身

HEAD /A3E7205B-6DC6-4685-9133-2759F739BC22
如果我想更改报告

POST /A3E7205B-6DC6-4685-9133-2759F739BC22
PUT
PATCH
是具有更具体语义的
POST
的有效替代方案,因此可以在那里使用

从REST的角度来看,create只是另一种编辑:

资源可以映射到空集合,空集合允许在概念的任何实现存在之前引用该概念——Fielding

但是POST的一般灵活性的一部分是它支持创建具有不同标识符的资源。如果你愿意,你可以这样做

如果报告不存在;初始化并返回报告

GET语义应该是安全的——允许缓存通过预加载资源来改善体验,允许爬行器对资源进行爬网,等等。这并不意味着你不能创建一些东西——HTTP约束你的语义,而不是你的实现——只是你需要意识到其中的含义

HTTP并不试图要求GET的结果是安全的。什么 它确实要求操作的语义是安全的,并且 因此,这是实现的错误,而不是接口的错误 或者该界面的用户,如果结果发生任何事情 造成财产损失--

你观察到:

发布。。。到端点的空实体似乎是错误的

不,真的很好。您需要考虑其他一些用例(将一个空的主体发布到一个确实存在的报告中意味着什么?)


但是,如果创建一个新的报告实际上是免费的,而客户不需要知道详细信息?然后告诉客户
获取
表示,并根据需要创建所需内容。

为什么客户需要知道报告是否存在?这对客户重要吗?作为一种资源,对“报告”的期望是什么。它只是一个对象还是一个动作/操作/服务?一个对象:业务层可能已经根据需要创建了一个或多个报告。在这种情况下,Idea-1似乎是正确的方法。操作/操作/服务:然后在Idea 2中的“200如果报告不存在;初始化并返回报告”似乎是正确的方法。我不确定这两种情况的混合是否正确。Thnks