Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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创建_Rest_Post_Get - Fatal编程技术网

没有持久性的REST创建

没有持久性的REST创建,rest,post,get,Rest,Post,Get,现在我有一个REST服务,它通过POST创建报告: POST http://myhost/reports 但是,该报告未持续保存,以后无法通过GET检索: GET http://myhost/reports/{id} 相反,我会在回复帖子时立即返回报告。我是否违反了任何REST原则,例如,帖子创建的任何内容都应该通过GET访问,或者此设置是否正常?否,您没有违反REST。只要您的接口是统一的,就由您决定API的URL执行什么操作 作为文档的一部分,您只需要声明哪些方法对某些资源有效,哪些不有

现在我有一个REST服务,它通过POST创建报告:

POST http://myhost/reports
但是,该报告未持续保存,以后无法通过GET检索:

GET http://myhost/reports/{id}

相反,我会在回复帖子时立即返回报告。我是否违反了任何REST原则,例如,帖子创建的任何内容都应该通过GET访问,或者此设置是否正常?

否,您没有违反REST。只要您的接口是统一的,就由您决定API的URL执行什么操作

作为文档的一部分,您只需要声明哪些方法对某些资源有效,哪些不有效。我真的很喜欢使用Twitter API作为“做什么”的好例子

例如:

不创建可在上访问的对象

GET statuses/update/3

POST方法不是CRUD中create的同义词。POST方法用于任何未标准化的操作,因此只要您记录它所做的事情,无论您做什么,都不会违反REST

没有这样的REST原则说“帖子创建的任何内容都应该通过GET访问”。由于将REST与CRUD混为一谈,这是一个常见的误解。请阅读以了解有关该问题的一些澄清

在非正式语言中,POST对服务器说的是“按照您为资源媒体类型记录的规则,获取此数据并将其应用于给定URI标识的资源。”

POST方法执行的操作可能不会生成资源 可以由URI标识的。在这种情况下,200(正常)或204 (无内容)是适当的响应状态,具体取决于 响应是否包含描述结果的实体


因此,根据HTTP标准,这是可以的。

您确定不能通过GET请求解决此问题吗?您是指使用GET创建吗?我先尝试了一下,但认为使用GET创建一些东西是不正确的。但也许没关系。对于任何客户来说,这将是关于获取(并在幕后创建)特定客户的报告,即:获取{customerId}这有意义吗?您没有创建任何东西,因为结果不会持久。您只需请求服务返回现有资源的表示。。。报告应该包含哪些内容,您需要哪些资源来支持它?
GET myhost/customer/123?aspect=“report”&date=“05.22.14。”
或者类似的东西是不够的
获取myhost/customer/123/report?date=“05.22.14。”
也是一个可行的解决方案。在您当前的情况下,您希望读取包含客户当前报告的精确日期的数据。读取数据部分通常意味着
GET
。客户的当前报告是指我所说的
customers/{id}/report
。确切日期部分的意思是我所说的
?date=“05.22.14”。
(或者您可以使用iso日期格式)。http方法是关于您想要做什么,路径是关于什么资源,querystring是关于当前请求的详细信息。我想我会发布一个详细的答案。不是真的。这是对统一界面约束的误解。决定URL执行什么操作并不取决于您,只取决于涉及POST方法的操作。GET、PUT、PATCH和DELETE方法在HTTP标准本身中都有定义良好的操作,因此如果偏离这些操作,就会偏离预期的接口。
GET statuses/update/3