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

目前我正在尝试构建一个宁静的HTTP后端框架。 我读过一本名为“Restful webservices”的书,它在这个领域开始了一些脑力劳动。 我现在对于为什么资源导向架构是一件好事情有了更大的了解,但仍然有一些我无法理解的模糊部分。我会试着解释一下我的想法,看看是否有人能让我更聪明。 难道没有人说一切都是对象。汽车,钢笔,书籍甚至抽象的东西,如想法和概念都可以成为一个对象。因为单词对象只是人类对“某事”的发明。 难道你也不能说每个“东西”都是一种资源。硬币,计算机甚至债务可能是一种资源。但问题是对谁。债务是一种资源,但不是欠欠债的人,而是欠他欠债的人。与人体残留物相同。它们是资源,但不是为了我们,而是为了大自然,因为它需要平衡 - 进出 - 科学基础(编程)。 资源(对象)似乎是名词。形容词和动词怎么样?实际上似乎所有东西都可以用名词来描述。例如。 形容词:汽车是红色的 名词:汽车颜色为红色 形容词:我累了 名词:我有一种疲倦 动词:我杀了他 名词:我创造了一个杀戮 动词:我亲吻她 名词:我创造了一个吻 这意味着resource = object = noun。从不同的角度看同样的“东西”。 也许有动词和形容词没有名词等同,但那只是人类语言中的一个缺陷,而不是概念本身。 回到开始这一切的原因。 当我真的想到只有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? “创造”和“删除”另一部分自然法则吗?     
已邀请:
我认为你关注的是一个宁静的API的两个不同方面。将HTTP方法简化为简单的IN和OUT已经通过请求和响应完成。当然,你可以将read映射到GET和PUT来创建,但DELETE呢?那是“PUT为0”吗?如果是这样,那么你需要逻辑来处理这种情况。 例如,当您将文档打开到文本编辑器中时,您正在对OS执行IN操作,并且OS对文本编辑器执行和OUT操作。保存文档的情况恰恰相反。 但那只是简单的家务保持机制。当然,文本编辑器可以使用PUT屏蔽IN,使用PUT屏蔽OUT,如“另存为”,但是DELETE呢?这将需要它自己的动词或将PUT / OUT动作重载到OS。然后是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规范的帖子中是正确的。     
您只需使用两种方法创建任何系统,GET和POST,等同于GET = Read和POST = Write。 其他方法只是有助于为请求添加一些可见性。 如果你真的想尝试根据对象建模REST请求,我会这样做:
result = new Search(Books,"Foo").Get();
但是,我不确定这种映射是否特别有价值。     
RESTful API本质上是某种数据存储的接口:DB,文件系统,分布式哈希表,& c。这意味着你真的不需要自定义动词(标准接口通常更好),因为你可以使用GET,PUT,POST和DELETE完成所有操作。 同样重要的是要注意RESTful API专门要求使用现有的HTTP方法来处理CRUD资源。此外,API不需要复杂或冗长有用甚至功能强大。在大多数情况下,简单是你的朋友。在许多情况下,简单的结构和简单的接口比同等的复杂结构/接口做得好得多。例如,看看git,它使用的数据结构是非常非常简单的,因此git非常非常快。 至于你的问题:是的,人们一直这样做而且它有效!     
  但后来我想,只有“在”   和“出去”。也许只有   “创建”和“删除”。导致GET和   PUT是可以替换的动词   用“创造一个阅读”和“创造一个   更改”。 你可以做到这一点。你可以走得更远,用ѭ4做一切。然后,您可以在HTTP请求中包含一个信封,该信封说明您要执行的操作。您甚至可以只有一个端点,并根据HTTP请求的内容拥有尽可能多的不同操作。你可以有
createBook
updateBook
getAllBooks
等等。 你有
SOAP
。 作为必须为SOAP和RESTful Web服务构建,维护和编码的人,请自己(以及其他所有人)帮忙,并使用REST。     
GET,POST,PUT和DELETE与创建,读取,更新和删除没有直接关系。它们通常可以,但重要的是要注意POST和PUT都可以执行更新和创建功能。 http://en.wikipedia.org/wiki/POST_%28HTTP%29   POST方法应该用于任何   请求所在的上下文   非幂等 这意味着POST应该用于任何改变服务器(数据)状态的函数,并且GET,PUT和DELETE应该用于任何不改变服务器状态的函数。 编辑: 回答这个问题:是的。我已经看到了许多用于创建带有html标头的restful API的解决方案。它们都归结为使用目录结构和正确的HTML标头。 http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services     

要回复问题请先登录注册