- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
目前我正在尝试构建一个 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/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!