写一下我对restful的理解,最近换工作面试的时候有问到我restful api的东西,工作中以前很多项目也是webapi + js前台控件的形式构建系统。实际上感觉restful太“理想化”,用起来不是特别顺手, 举例说明下:
先看看什么叫restful:
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
GET /tickets # 获取ticket列表
GET /tickets/12 # 查看某个具体的ticket
POST /tickets # 新建一个ticket
PUT /tickets/12 # 更新ticket 12.
DELETE /tickets/12 #删除ticekt 12
实际上呢,不是所有的东西都是“资源”,尤其是在业务系统中,缺点如下:
有个接口是更新订单状态,你是用上面的GET POST PUT DELETE 哪个呢,看样子应该是PUT,但是路径呢PUT /tickets/12
我有时候多个接口 ,更新订单收款状态,更新订单支款状态,更新订单结算状态;
Restful 的路径明显不友好不够用;
比如,Resuful要求 GET /tickets # 获取ticket列表 。我们曾经有个需求,对方会把不超过1000个订单id传给我们,我们系统过滤其中一部分特殊订单;这也是个查询服务,用GET /tickets # 获取ticket列表的形式,1000个订单id显然是超过GET url长度的,这里也不合适;再者,我想开发多个条件查询列表服务,路径这么浅显然不合适;
实际业务中,我们webapi的路径是这样的:systemAlias/controller/action
总结下规则:
简单查询尽量用GET,好处是可以直接带查询参数copy api路径;
复杂查询和更新用POST,用的最多;
不用PUT和DELETE,原因是增加复杂度,并没有带来什么好处
看看BAT的很多openapi,也是写着restful,实际没有严格遵守,都是get和post,这是也很多人不知道put和delete的原因
RESTful设计原则(不同公司具体细节可能不同):
在接口命名时应该用名词,不应该用动词,因为通过接口操作到是资源。
在url中加入版本号,利于版本迭代管理更加直观
https://www.rgc.com/v1/
对于资源的操作类型应该是通过http动词表示。
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
排序规则:默认时升序,‘-’为降序;多个排序规则时以逗号间隔组合。使用sort查询参数限制
GET /tickets?sort=-time,created_at
优先以time倒序显示,其次以created_at正序显示
限制返回值的字段域:明确指定输出字段列表,用于控制网络带宽和速度。使用fields查询参数来限制。
GET /tickets?fileds=id,subject,customer_name,time&sort=-time
返回参数列表为id,subject,customer_name,time,并且以time字段倒序显
HTTP Method分别对于资源的CURD操作
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
保证 POST,PUT,DELETE,PATCH,GET 操作幂等性。
使用SSL(Secure Sockets Layer 安全套接层)
参数和url采用蛇行命名方式。如:updated_time
服务器请求和返回的数据格式,应该尽量使用JSON,避免使用XML。在 request中的Accept和Response中的Content-Type:application/json
restful即表象层状态转变。
restful七大原则:
1. C-S架构
数据的存储在Server端,Client端只需使用就行。两端彻底分离的好处使client端代码的可移植性变强,Server端的拓展性变强。两端单独开发,互不干扰。
2. 无状态
http请求本身就是无状态的,基于C-S架构,客户端的每一次请求带有充分的信息能够让服务端识别。
请求所需的一些信息都包含在URL的查询参数、header、body,服务端能够根据请求的各种参数,无需保存客户端的状态,将响应正确返回给客户端。
无状态的特征大大提高的服务端的健壮性和可拓展性。
当然这总无状态性的约束也是有缺点的,客户端的每一次请求都必须带上相同重复的信息确定自己的身份和状态,造成传输数据的冗余性,但这种确定对于性能和使用来说,几乎是忽略不计的。
3.统一的接口
这个才是REST架构的核心,统一的接口对于RESTful服务非常重要。客户端只需要关注实现接口就可以,接口的可读性加强,使用人员方便调用。
4.一致的数据格式
服务端返回的数据格式要么是XML,要么是Json,或者直接返回状态码,有兴趣的可以看看博客园的开放平台的操作数据的api,post、put、patch都是返回的一个状态码 。
5.系统分层
客户端通常无法表明自己是直接还是间接与端服务器进行连接,分层时同样要考虑安全策略。
6.可缓存
在万维网上,客户端可以缓存页面的响应内容。因此响应都应隐式或显式的定义为可缓存的,若不可缓存则要避免客户端在多次请求后用旧数据或脏数据来响应。
管理得当的缓存会部分地或完全地除去客户端和服务端之间的交互,进一步改善性能和延展性。
7.按需编码、可定制代码(可选)
服务端可选择临时给客户端下发一些功能代码让客户端来执行,从而定制和扩展客户端的某些功能。
比如服务端可以返回一些 Javascript 代码让客户端执行,去实现某些特定的功能。
grpc和restful的区别在于它们的通信协议和数据传输方式不同。grpc和restful在通信协议和数据传输方式上有所区别。grpc是一种高性能、跨语言的远程过程调用(RPC)框架,它使用了二进制的协议缓冲区(Protocol Buffers)作为数据交换格式,并使用HTTP/2作为底层的传输协议。而restful是一种基于HTTP协议的软件架构风格,它使用了常见的HTTP方法(GET、POST、PUT、DELETE等)和URL来进行数据传输。grpc相比于restful具有更高的性能和更小的数据传输量。由于grpc使用了二进制的协议缓冲区,可以更高效地序列化和反序列化数据,从而减少了网络传输的开销。另外,grpc还支持双向流式传输,可以实现更复杂的通信模式。而restful相对简单易用,更适合于简单的数据传输和对外开放的API接口。因此,在选择通信协议和数据传输方式时,需要根据具体的需求和场景来进行选择。
面对对象不同:
RPC 更侧重于动作。
REST 的主体是资源。
RESTful 是面向资源的设计架构,但在系统中有很多对象不能抽象成资源,比如登录,修改密码等而 RPC 可以通过动作去操作资源。所以在操作的全面性上 RPC 大于 RESTful。
传输效率:
RPC 效率更高。RPC,使用自定义的协议,对传输的数据进行二进制压缩,可以让请求报文体积更小,或者使用 HTTP2 协议,也可以很好的减少报文的体积,提高传输效率。
复杂度:
RPC 实现复杂,流程繁琐。
REST 调用及测试都很方便。
RPC 实现需要实现编码,序列化,网络传输等。而 RESTful 不要关注这些,RESTful 实现更简单。
灵活性:
HTTP 相对更规范,更标准,更通用,无论哪种语言都支持 HTTP 协议。
RPC 可以实现跨语言调用,但整体灵活性不如 RESTful。
总结
RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。
HTTP 主要用于对外的异构环境,浏览器接口调用,App 接口调用,第三方接口调用等
在现代前端开发中,jQuery是一项不可或缺的工具。它是一个快速、简洁的JavaScript库,简化了文档的遍历、事件处理、动画和Ajax交互。无论您是初学者还是经验丰富的开发人员,jQuery都为您提供了丰富的功能和便捷的方法来处理各种前端交互。
RESTful架构是一种基于网络标准HTTP协议的设计风格,它广泛应用于现代Web开发中。通过遵循一组简洁且统一的原则,RESTful架构使得Web应用程序更加灵活、可扩展和易于维护。采用RESTful架构的Web服务也更容易实现与其他系统的集成和交互。
将jQuery和RESTful架构结合起来,可以为现代Web应用的开发带来诸多好处。通过jQuery的强大功能和便捷性,开发人员可以轻松地实现与后端服务器的交互和动态页面效果。同时,采用RESTful架构设计Web服务接口,则可以使得应用程序更具可扩展性和易维护性。
在现代Web开发中,通过jQuery来处理RESTful API请求是一种常见且高效的做法。开发人员可以利用jQuery提供的AJAX方法来发送GET、POST、PUT和DELETE请求,并处理服务器返回的数据。这种方式使得前端与后端的数据交互更加简单和灵活。
通过jQuery的AJAX方法,开发人员可以在不刷新整个页面的情况下,动态加载数据并更新页面内容。这种技术对于构建响应式、交互性强的Web应用至关重要。结合RESTful API设计,可以构建出更加优雅和高效的数据交互方式。
除了处理数据交互,jQuery还提供了丰富的动画效果和特效,可以优化用户在Web应用中的交互体验。通过使用jQuery的动画功能,开发人员可以实现页面元素的平滑过渡、弹出效果和渐变动画,为用户带来更加流畅和吸引人的界面交互。
综上所述,jQuery和RESTful架构是现代前端开发中不可或缺的利器。它们为开发人员提供了丰富的功能和便捷的方式来构建现代Web应用。通过合理地结合这两者,开发人员可以实现更加高效、优雅和具有良好用户体验的Web应用。
flask restful
在flask基础上进行一些封装,主要用于实现restful接口
SOAP(Simple Object Access Protocol)简单对象访问协议,是基于HTTP的一种异构系统通信的协议,说白了就是xml文档传输,之所以会有它,就是在于不同语言C,C++,JAVA等语言开发的系统进行通信,是WebService就是基于SOAP协议的,确实是一种比较传统的SOA解决方案。
REST(Rerepresentational State Transfer)是外国一位博士提出的一种架构风格,从资源状态转换角度看待资源,但也是基于SOAP协议进行通信。rest 是一种风格 restful Webservice 和 soap的区别在于表现形式不一样,如果想深入了解 可以去开开 深入理解Webservice 这本书,restful Webservice 不只是可以用json 也可以用xml 更可以用html做消息返回, rest 风格的Webservice 和传统的soap 主要的表现在于 rest是将资源暴露 soap是暴露操作 。
具体的流程其实和soap是一样的,但是rest更方便,更轻。
在当今互联网时代,构建高效、可扩展的 Web 应用程序是每个开发人员的必修课程。借助现代技术,如Spring框架和RESTful API,我们能够构建功能强大且易于维护的应用程序。本文将重点探讨在Spring框架中如何设计并实现RESTful JSON API。
RESTful API 是一种基于 REST(Representational State Transfer)架构风格设计的 API。它强调利用HTTP协议定义的方法来进行数据交互,并使用各种HTTP状态码来表示不同的操作结果。通过RESTful API,我们可以实现资源的创建、读取、更新和删除(CRUD)操作,这使得Web应用程序的开发更加灵活和可靠。
在Spring框架中,我们可以利用Spring MVC模块来轻松构建RESTful API。以下是一些设计原则,可帮助我们设计出高质量的RESTful API:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于RESTful API中。它具有易读性和简洁性的特点,适合在不同平台之间进行数据传输。
在Spring框架中,我们可以借助Jackson库或Gson库来实现将Java对象序列化为JSON字符串,并反之。以下是一个简单的示例:
@RequestMapping(value = "/user", method = RequestMethod.GET)
public ResponseEntity<User> getUser() {
User user = userService.getUser();
return ResponseEntity.ok(user);
}
在上述代码中,我们通过 `@RequestMapping` 注解定义了一个GET方法的API接口,返回一个User对象。Spring会自动将User对象序列化为JSON格式,并返回给客户端。
为了提高RESTful API的性能和可维护性,我们还需要考虑一些最佳实践和性能优化策略:
通过本文的学习,我们深入了解了在Spring框架中设计和实现RESTful JSON API的关键原则和最佳实践。合理利用RESTful API和JSON数据格式,可以帮助我们构建出高效、可靠的Web应用程序,提升用户体验并提高开发效率。
希望本文能为您在Web应用程序开发中提供一些有用的参考和指导,祝愿您在未来的项目中取得成功!
随着互联网的快速发展,RESTful API 成为了现代应用程序开发中不可或缺的一部分。PHP 作为一种功能强大的编程语言,为开发人员提供了许多工具和库来创建和管理 RESTful API。本文将为您提供关于如何编写高质量的 PHP RESTful 文档的详细指南。
REST(Representational State Transfer)是一种设计风格,用于构建基于网络的应用程序的架构风格。RESTful API 是符合 REST 架构风格的 API。它通过使用 HTTP 协议的不同方法(如 GET、POST、PUT、DELETE 等)来实现对资源的创建、读取、更新和删除操作。
RESTful API 的一个关键概念是资源(Resources)。资源是由 URL(统一资源定位符)唯一标识的实体,可以是一个对象、一段文本、一张图片等。
RESTful API 的文档是帮助开发人员理解和使用 API 的关键资源。良好的文档可以提供清晰的指导,减少潜在的开发错误,并提高整体开发效率。以下是编写高质量 PHP RESTful API 文档的几个重要原则:
下面是编写 PHP RESTful API 文档的一些建议和最佳实践:
为了使文档具有一致性,您可以使用标准的文档结构,例如使用 Markdown 或 标记语言。这使得文档易于阅读和维护。
在文档的开头,提供一些基本信息,比如 API 的名称、版本信息、作者、许可证等。这些信息可以帮助开发人员更好地了解 API 的背景和使用情况。
对于每个 API 端点,提供清晰的描述,包括 URL、HTTP 方法、参数和请求/响应示例。使用表格或列表来组织信息,使其易于阅读和理解。
<h3>List Users</h3>
<p>Get a list of all users.</p>
<strong>URL: /users
<strong>Method: GET
<strong>Parameters:
- limit (optional) - The maximum number of users to return.
- page (optional) - The page number of the results.
<strong>Example Request:
GET /users?limit=10&page=1
<strong>Example Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"users": [
{"id": 1, "name": "John Doe"},
{"id": 2, "name": "Jane Smith"}
]
}
在文档中明确说明可能发生的错误以及相应的处理方式。列出常见的错误代码和错误消息,并提供示例代码来指导开发人员如何处理这些错误。
示例代码是帮助开发人员更好理解使用 API 的重要资源。在文档中提供可运行的示例代码,涵盖常见的编程语言和库。
包含一个常见问题解答(FAQ)部分,回答开发人员可能遇到的一些常见问题。这有助于减少对支持团队的额外负担,并提供更好的开发体验。
编写高质量的 PHP RESTful API 文档是确保开发人员能够轻松理解和使用 API 的关键要素之一。通过遵循本文中的指南和最佳实践,您可以提供清晰、完整和易于使用的文档,从而提高整体开发效率,减少潜在的开发错误。
无论您是 API 提供者还是使用者,正确编写和使用文档都是提升开发过程的重要步骤。因此,我们鼓励您将此指南作为参考,并根据自己的需求进行适当的调整。