因此,我一直在浏览有关创建REST API的文章。其中一些建议使用所有类型的HTTP请求:like PUT
DELETE
POST
GET
。我们将创建例如 index.php 并以这种方式编写API:
$method = $_SERVER['REQUEST_METHOD'];
$request = split("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method) {
case 'PUT':
....some put action....
break;
case 'POST':
....some post action....
break;
case 'GET':
....some get action....
break;
case 'DELETE':
....some delete action....
break;
}
好的,理所当然-我对Web服务还不太了解。但是,通过常规或(包含方法名称和所有参数)接受 JSON
对象,然后也以JSON进行响应,会不会更容易。我们可以轻松地通过PHP进行序列化/反序列化,并且无需处理不同的HTTP请求方法就可以对数据进行任何处理。POST``GET``json_encode()``json_decode()
我想念什么吗?
更新1:
好的-在研究了各种API并学习了很多有关 XML-RPC , JSON-RPC , SOAP 和 REST的知识之后,
我得出了这样的API合理的结论。实际上,堆栈交换实际上是在他们的站点上使用这种方法的,我确实认为这些人知道他们在做什么堆栈交换API。
的想法 RE 表象 小号 泰特 Ť 转让(BOT)是不是在可能的最简单的方法访问数据。
您建议使用发布请求来访问JSON,这是访问/处理数据的一种完全有效的方法。
REST是一种 有意义 的数据访问方法。当您在REST中看到请求时,应该立即了解数据的情况。
例如:
GET: /cars/make/chevrolet
可能会返回雪佛兰汽车的清单。
好的REST
api甚至可以在querystring中包含一些输出选项,例如
?output=json
或
?output=html
,这将允许访问者决定信息应以哪种格式编码。
关于如何合理地一体化的数据类型为REST
API比特思考后,我已经得出结论,最好的办法明确指定的数据类型是通过已存在的文件扩展名,例如.js
,.json
,.html
,或.xml
。缺少的文件扩展名将默认为默认格式(例如JSON);不支持的文件扩展名可能返回501 Not Implemented
状态码。
另一个例子:
POST: /cars/
{ make:chevrolet, model:malibu, colors:[red, green, blue, grey] }
可能会在db中创建具有关联颜色的新雪佛兰马里布。我说的 可能 是因为REST
api不需要与数据库结构直接相关。它只是一个屏蔽接口,因此可以保护真实的数据(例如数据库结构的访问器和变异器)。
现在我们需要讨论幂等问题。通常,REST 通过HTTP
实现CRUD。HTTP使用GET
,PUT
,POST
和DELETE
为请求。
REST的一个非常简单的实现 可以 使用以下CRUD映射:
Create -> Post
Read -> Get
Update -> Put
Delete -> Delete
此实现存在一个问题:Post被定义为非幂等方法。这意味着相同Post方法的后续调用将导致 不同的
服务器状态。Get,Put和Delete是幂等的;这意味着多次调用它们应导致相同的服务器状态。
这意味着请求如下:
Delete: /cars/oldest
实际上可以实现为:
Post: /cars/oldest?action=delete
鉴于
Delete: /cars/id/123456
如果调用一次或调用1000次,将导致相同的服务器状态。
处理该oldest
物品移除的更好方法是要求:
Get: /cars/oldest
并使用ID
结果数据中的发出delete
请求:
Delete: /cars/id/[oldest id]
这种方法的问题是,是否/cars
在/oldest
请求时间和delete
发布时间之间添加了另一个项目。
Apache CouchDB是最新的数据库之一。 CouchDB具有无模式的文档模型,更适合常见应用。可支持非常大数据量查询。 使用CouchDB的主要原因是什么? CouchDB易于使用。 有一个单词可以描述CouchDB - “Relax”。 它也是组成CouchDB官方标志一个单词。 “Apache CouchDB已经开始了,现在是放松时间。” CouchDB具有基于HTTP的REST AP
DevOps允许敏捷开发团队实施持续集成和持续交付。这有助于他们更快地将产品推向市场。 其他一些的重要原因是: 可预测性:DevOps可以显着降低新版本的故障率 再现性:版本一切,以便可以随时恢复早期版本。 可维护性:在新版本崩溃或禁用当前系统的情况下,可以毫不费力地进行恢复。 交付/上市时间:DevOps通过简化的软件交付将上市时间缩短至50%。对于数字和移动应用尤其如此。 更高的质量:DevO
Akka平台提供哪些有竞争力的特性? Akka提供可扩展的实时事务处理。 Akka为以下目标提供了一致的运行时与编程模型: 垂直扩展(并发) 水平扩展(远程调用) 高容错 这个模型是唯一需要学习和掌握的,它具有高内聚和高一致的语义。 Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心——akka-actor是非常小的,可以方便地加入你的应用中,提供
问题内容: 我经常在PHP中看到包含include.inc文件的示例。.inc是什么意思?它的作用是什么?使用它的缺点和优点是什么? 问题答案: 它没有任何意义,只是一个文件扩展名。如果扩展名是.inc的文件被设计为包含在其他PHP文件中,这是某些人的惯例,但这只是惯例。 它确实存在一个可能的缺点,即通常没有将服务器配置为将.inc文件解析为php,因此,如果该文件位于您的Web根目录中,并且您的
本文向大家介绍为什么要使用 kafka,为什么要使用消息队列?相关面试题,主要包含被问及为什么要使用 kafka,为什么要使用消息队列?时的应答技巧和注意事项,需要的朋友参考一下 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性:项目开始的
问题内容: serialVersionUID缺少a时,Eclipse发出警告。 问题答案: 首先,我需要解释什么是序列化。 序列化 允许将对象转换为流,以便通过网络发送该对象,或者保存到文件或保存到DB以供使用。 有一些序列化规则。 仅当对象的类或其超类实现接口时,该对象才可序列化 一个对象是可序列化的(本身实现了接口),即使其超类不是。但是,可序列化类的层次结构中的第一个超类(不实现Serial
问题内容: 我注意到,Oracle JDK中使用了许多Java 8方法,如果给定的对象(参数)为,则会在内部抛出该方法。 但是,如果取消引用对象,则将被抛出。那么,为什么要做这个额外的null检查并抛出 ? 一个明显的答案(或好处)是它使代码更具可读性,我同意。我很想知道在方法开始时使用的其他原因 。 问题答案: 因为您可以这样做使事情变得 明确 。喜欢: 或更短: 现在您 知道了 : 当 成功使
问题内容: 我正在将DAO层从使用Hibernate API更改为使用纯JPA API实现的过程中。似乎推荐的方法是使用实体管理器中的createNamedQuery。命名查询存储在模型/实体类的注释中。这对我来说毫无意义。为什么要在模型对象中定义JPA查询,却在DAO中使用它们。仅在DAO本身中使用createQuery并在DAO中定义查询,甚至在DAO本身中定义命名查询,是否更有意义? 对