Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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
Java 只使用四种HTTP方法创建任何类型的restful API?_Java_Javascript_Python_Ruby_Rest - Fatal编程技术网

Java 只使用四种HTTP方法创建任何类型的restful API?

Java 只使用四种HTTP方法创建任何类型的restful API?,java,javascript,python,ruby,rest,Java,Javascript,Python,Ruby,Rest,目前,我正在尝试构建一个restful HTTP后端框架 我读过一本名为“RESTfulWebservices”的书,它开启了这方面的一些脑力劳动 我现在对为什么面向资源的体系结构是一件好事有了更大的了解,但仍然有一些模糊的部分我无法理解。我会尽力解释我的想法,看看有没有人能让我更聪明 难道不能说一切都是物体吗。汽车、笔、书,甚至抽象的东西,比如一个想法和一个概念,都可以是一个物体。因为对象这个词只是人类对“某物”的发明 难道你不能说每个“东西”都是一种资源吗。硬币、电脑甚至债务都可能成为一种资

目前,我正在尝试构建一个restful HTTP后端框架

我读过一本名为“RESTfulWebservices”的书,它开启了这方面的一些脑力劳动

我现在对为什么面向资源的体系结构是一件好事有了更大的了解,但仍然有一些模糊的部分我无法理解。我会尽力解释我的想法,看看有没有人能让我更聪明

难道不能说一切都是物体吗。汽车、笔、书,甚至抽象的东西,比如一个想法和一个概念,都可以是一个物体。因为对象这个词只是人类对“某物”的发明

难道你不能说每个“东西”都是一种资源吗。硬币、电脑甚至债务都可能成为一种资源。但问题是谁。债务是一种资源,但不是欠谁的,而是欠谁的。人体残留物也是如此。它们是资源,但不是我们的资源,而是大自然的资源,因为它需要科学基础(编程)的内外平衡

资源(对象)似乎是名词。形容词和动词怎么样?实际上,似乎一切都可以用名词来描述。例如

  • 形容词:这辆车是红色的
  • 这辆车是红色的
  • 形容词:我累了
  • 名词:我有点累
  • 动词:我杀了他
  • 我创造了一个杀手
  • 动词:我吻她
  • 我创造了一个吻
这意味着资源=对象=名词。从不同的角度看相同的“东西”

也许有些动词和形容词没有名词对等词,但这只是人类语言中的一个缺陷,而不是概念本身

回到这一切的开始

当我真的想到只有4个(我知道还有更多)HTTP动词——POST、GET、PUT、DELETE时,我觉得它无法创建强大的restful API,因为它们将API限制在基本的CRUD操作上。但经过一些阅读和思考后,我意识到一切都是可以创建、阅读、更改或删除的资源。就像进进出出一样,简单的规则,但却能创造出任何东西

但后来我想,只有“进”和“出”。可能只有“创建”和“删除”。原因GET和PUT是可以替换为“创建读取”和“创建更改”的动词

所有这些只是我在玩弄自然母亲的基本观念。输入和输出,创建和删除。前者在编程领域已经被广泛接受。但后者你没听说过那么多。但如果这是正确的,那么这就意味着HTTP Restful API可以用正确的方式创建任何东西,而不是通过修改版本(将动词放在uri、请求体等中)对其进行黑客攻击,而是只使用POST、GET、PUT、DELETE

我们只需要将所有方法转换为资源/对象。而不是:

result = Books.search("Foo");
我们必须思考:

result = Search.create(Books, "Foo");
你觉得这个怎么样? 考虑到这一点,我们可以只使用四种HTTP方法创建任何类型的restful API吗?
“创建”和“删除”是自然法则的另一部分吗?

获取、发布、放置和删除和创建、读取、更新和删除并没有直接关系。它们通常可以,但需要注意的是,POST和PUT都可以执行更新和创建功能

POST方法应用于任何 请求所处的上下文 非幂等元

这意味着POST应用于任何更改服务器(数据)状态的函数,而GET、PUT和DELETE应用于任何不更改服务器状态的函数

编辑:
回答这个问题:是的。我已经看到了许多使用html头创建restful API的解决方案。它们都归结为使用目录结构和正确的HTML标题


通过将GET=Read和POST=Write等同起来,您可以仅使用GET和POST两种方法创建任何系统。 其他方法只是帮助为请求添加一些可见性

如果您确实想尝试根据对象对REST请求进行建模,我会这样做:

result = new Search(Books,"Foo").Get();

但是,我不确定这种映射是否特别有价值。

RESTful API本质上是某种数据存储的接口:数据库、文件系统、分布式哈希表等。这意味着您确实不需要自定义谓词(无论如何,标准接口通常更好),因为您可以使用get、PUT、POST和DELETE完成所有操作

还需要注意的是,RESTful API专门调用使用现有HTTP方法来CRUD资源。此外,API不需要复杂或冗长才能有用甚至强大。在大多数情况下,简单是你的朋友。在许多情况下,简单结构和简单接口比等效的复杂结构/接口做得更好。以git为例,它使用的数据结构非常、非常、简单,因此git非常、非常、快速

至于你的问题:是的,人们总是这样做,而且很有效

但后来我想,只有“在” 和“出去”。也许只有 “创建”和“删除”。使得到 PUT是可以替换的动词 使用“创建读取”和“创建读取” 改变”

你可以这样做。您可以更进一步,使用
POST
完成所有操作。然后,您可以在HTTP请求中有一个信封,上面写着您想要执行的操作。您甚至可以只拥有一个端点,并根据HTTP请求的内容拥有尽可能多的不同操作。您可以有
createBook
updateBook
getallbook
,等等

还有
SOAP


作为一个必须针对SOAP和RESTful web服务进行构建、维护和编码的人,请帮自己(和其他人)一个忙,使用REST。

我认为您将RESTful API的两个不同方面联系起来。将HTTP方法简化为
if(OUT){
    if(file_exists) update_file
    else if(file_size==0) delete_file
    else create_file
}