ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-05 19:08:15  阅读:146  来源: 互联网

标签:rest ruby javascript python java


目前,我正在尝试构建一个宁静的HTTP后端框架.

我读过一本书,叫做《 Restful webservices》,它在这方面开始了一些脑力劳动.

现在,我对面向资源的体系结构为什么是一件好事却有了更全面的了解,但是仍然有我无法理解的模糊部分.我将尝试解释我的想法,看看是否有人可以使我变得更聪明.

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

您还不能说每个“东西”都是资源.硬币,计算机甚至债务可能是一种资源.但是问题是谁.债务是一种资源,但不是欠的人,而是欠他的人.与人类残留物相同.它们是资源,但不是我们的资源,而是自然资源,因为自然界需要平衡科学基础(编程)的内外平衡.

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

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

这意味着资源=对象=名词.从不同的角度来看相同的“东西”.

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

回到所有这一切的开始.

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

但是后来我想到,只有“进”和“出”.也许只有“创建”和“删除”.原因GET和PUT是可被“创建读取”和“创建更改”替换的动词.

所有这一切只是我玩弄大自然的基本观念.输入和输出,创建和删除.前者在编程领域已被广泛接受.但是后者您所知不多.但是,如果这是正确的话,那么这意味着可以使用HTTP Restful API以正确的方式创建任何内容,而不是通过修改版本(将动词放入uri,请求正文等)对其进行黑客攻击,而只能使用POST,获取,放置,删除.

我们只需要将所有方法转换为资源/对象.代替:

result = Books.search("Foo");

我们必须考虑:

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

你怎么看待这件事?
考虑到这一点,是否可以仅使用四种HTTP方法来创建任何类型的静态API?
“创造”和“删除”是自然界的另一定律吗?

解决方法:

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

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

但这只是简单的内部维护机制.当然,文本编辑器可以像使用“另存为”一样用GET屏蔽OUT和使用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规范的帖子中当然是正确的.

标签:rest,ruby,javascript,python,java
来源: https://codeday.me/bug/20191105/1997008.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有