gpt4 book ai didi

java - 仅使用四种 HTTP 方法创建任何类型的 RESTful API?

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:49 26 4
gpt4 key购买 nike

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

我读过一本名为“Restful webservices”的书,它开启了我在这个领域的一些脑力劳动。

我现在对为什么面向资源的架构是一件好事有了更全面的了解,但仍然有一些我无法理解的模糊部分。我会尝试解释我的想法,看看是否有人能让我变得更聪明。

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

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

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

  • 形容词:汽车是红色的
  • 名词:汽车有红色
  • 形容词:我累了
  • 名词:我累了
  • 动词:我杀了他
  • 名词:我创造了一个杀戮
  • 动词:我吻她
  • 名词:我创造了一个吻

这意味着资源 = 对象 = 名词。不同视角下的同一个“东西”。

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

那么回到这一切的开始。

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

但转念一想,只有“进”和“出”。也许只有“创建”和“删除”。因为 GET 和 PUT 是可以替换为“创建读取”和“创建更改”的动词。

所有这一切只是我在玩弄大自然的基本概念。进出,创建和删除。前者在编程领域已经被广泛接受。但后者你听不到那么多。但如果这是正确的,那么这意味着 HTTP Restful API 可以用于创建任何东西,以正确的方式,而不是通过修改版本(将动词放在 uri、请求正文等中)来破解它,而只使用 POST,获取、放置、删除。

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

result = Books.search("Foo");

我们必须思考:

result = Search.create(Books, "Foo");

你怎么看这件事?考虑到这一点,是否可以仅使用四种 HTTP 方法创建任何一种 Restful API?“创造”和“删除”是另一条自然法则吗?

最佳答案

我认为您将 restful API 的两个不同方面联系起来。将 HTTP 方法简化为简单的 IN 和 OUT 已经通过请求和响应完成。当然,您可以将读取映射到 GET 和 PUT 来创建,但是 DELETE 呢?那是“PUT of 0”吗?如果是这样,那么您需要逻辑来处理这种情况。

例如,当您在文本编辑器中打开文档时,您正在对操作系统执行 IN 操作,而操作系统对文本编辑器执行 OUT 操作。保存文档则相反。

但这只是简单的管理机制。当然,文本编辑器可以用 GET 屏蔽 IN,用 PUT 屏蔽 OUT,就像“另存为”一样,但是 DELETE 呢?这将需要它自己的动词或将 PUT/OUT 操作重载到操作系统。然后是POST,相当于save*。我们是否重载 PUT 方法来检查文件是否已经存在?为什么不把它作为自己的动词呢?

如果你要减少到简单的 IN 和 OUT,那么你必须重载 OUT:

if(OUT){
if(file_exists) update_file
else if(file_size==0) delete_file
else create_file
}

*我说的更多是理论上的,当然 zzzzBov 在他关于 HTTP 规范的帖子中是正确的。

关于java - 仅使用四种 HTTP 方法创建任何类型的 RESTful API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com