rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯

0525fa510cb989847bff4bfebc7589bb.png

REST的重要概念

REST全称是Representational State Transfer,中文意思是表征性状态转移。RESTful是指具有REST表征的web架构风格,并非必须遵守的规则。

REST分离了API的结构和逻辑,主要应用于客户端和服务器交互类的软件。基于这种风格设计的软件更加简洁,更有层次,更易于实现缓存等机制。当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现,而且对于使用REST开发的应用程序更加容易扩展。

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答。

另一个重要的 REST 原则是分层系统,分层系统指组件无法了解它与之交互的中间层以外的组件。分层系统限制整个系统的复杂性,保证底层的独立性。

这里大家可以关注一下我的个人专栏《PHP进阶集中营》,每天会给大家即时分享一个最新的php技术资讯,有优秀的PHP技术内容,也欢迎分享在我的专栏。

PHP进阶集中营​zhuanlan.zhihu.com
dcf43fa59c725aeacab34f79948c103e.png

RESTful风格的7种具体特征:

1. 采用URI标识资源

RESTful Web API采用面向资源的架构,所以首先需要考虑的是有哪些资源可供操作。一个资源必须具有一个或者多个标识,在restful中使用URI作为资源的标识。作为资源标识的URI最好具有“可读性”,这用更容易被使用。除此之外,标识资源的URI还应该具有“可寻址性(Addressability)”。也就是说,URI不仅仅指明了被标识资源所在的位置,而且通过这个URI可以直接获取目标资源。(URI具有URL和URN两种主要的表现形式,只有URL具有可寻址性,所以我们最好采用一个URL作为资源的标识。)

2. 使用“链接”关联相关的资源

REST是使用标准的HTTP方法来操作资源的,但仅仅因此就理解成带CURD的Web数据库架构就太过于简单了。这种反模式忽略了一个核心概念:"超媒体即应用状态引擎(hypermedia as the engine of application state)"。 超媒体是什么?当你浏览Web网页时,从一个连接跳到一个页面,再从另一个连接跳到另外一个页面,就是利用了超媒体的概念:把一个个把资源链接起来。要达到这个目的,就要求在表述格式里边加入链接来引导客户端。如使用<a>的href属性关联资源、用url来链接项目所有者和项目地址。

3. 使用统一的接口

统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。

4. 使用标准的HTTP方法

7个常用的HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS。首先GET、HEAD和OPTIONS这三个HTTP方法旨在发请求以获取所需的信息。其他四种(POST、PUT、PATCH和DELETE),旨在针对目标资源作添加、修改和删除操作。具体如下:

GET:从服务器取出资源(一项或多项)。

POST:在服务器新建一个资源。

PUT:在服务器更新资源(客户端提供改变后的完整资源)。

PATCH:在服务器更新资源(客户端提供改变的属性)。

DELETE:从服务器删除资源。

HEAD:获取资源的元数据。

OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。[旨在发送一种“探测”请求以确定针对某个目标地址的请求须具有怎样的约束,然后根据其约束发送真正的请求。(“跨域资源”的预检 )]

5. 安全性与幂等性

GET、HEAD和OPTIONS均被认为是安全的方法,因为它们旨在实现对数据的获取,其它4个HTTP方法,由于它们会导致服务端资源的变化,所以被认为是不安全的方法。

幂等性在这里是指服务器状态的变化。如果一个方法重复执行多次,产生的效果是一样的,就说该资源是幂等方法 (在网速不够快的情况下,客户端发送一个请求后不能立即得到响应,由于不能确定请求是否被成功提交,所以它有可能会再次发送另一个相同的请求,幂等性决定了第二个请求是否有效。)七种HTTP方法中只有POST是一个非幂等的方法。由于DELETE和PATCH请求操作的是现有的某个资源,所以它们是幂等方法。对于PUT请求,只有在对应资源不存在的情况下服务器才会进行添加操作,否则只作修改操作,所以它也是幂等方法。 因为POST是进行添加操作,如果服务器接收到两次相同的POST操作,将导致两个相同的资源被创建,所以POST是一个非幂等方法。

6. 支持多种资源表示方式

资源和资源表示是两个不同的概念,资源表示是资源的表现形式。对于Web来说,目前具有两种主流的数据结构,XML和JSON,它们也是资源的两种主要的呈现方式。在设计Web API的时候,应该支持不同的资源表示。对于请求提交的资源,我们一般利用请求的Content-Type报头携带的媒体类型来判断其采用的表示类型。对于响应资源表示类型的识别有两种方式,一种是在URI中包含资源标识类型,另一种是采用“内容协商”,根据请求相关报头来判断它所希望的资源表示类型。(比如“Accept”和“Accept-language”报头可以体现请求可以接受的响应媒体类型和语言。)两者的差别是,前者具备浏览器兼容性,后者更智能。

7. 无状态性

RESTful只要维护资源的状态,而不需要维护客户端的状态。对于它来说,每次请求都是全新的,它只需要针对本次请求作相应的操作,不需要将本次请求的相关信息记录下来以便用于后续来自相同客户端请求的处理。

RESTful设计误区:

1. URI中包含动词。因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。

2. URI中含有版本号。因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分

RESTful架构与其他架构的区别

SOAP WebService

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

WebService通过HTTP协议发送请求和接受结果时采用XML格式封装,并增加了一些特定的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。

效率和易用性

SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。

RESTful由于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了HTTP最初的应用协议设计理念。

安全性

RESTful对于资源型服务接口来说很合适,同时特别合适对于效率很高,但是对于安全要求不高的场景。

SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求比较高的接口设计带来便利。

PHP进阶学习笔记、面试;文档、视频资源免费获取​shimo.im
375e24f4b5d0ae32f8d036dd78f2bd14.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle截取字符串替换,oracle字符串操作:拼接、替换、截取、查找

‘拼接‘||‘字符串‘ as Str from student;2、使用concat(param1,param2)函数实现&#xff1a;select concat(‘拼接‘,‘字符串‘) as Str from student;注&#xff1a;oracle的concat()方法只支持两个参数&#xff0c;如果拼接多个参数&#xff0c;可以嵌套concat()&#xf…

oracle函数 INSTR(C1,C2[,I[,J]])

【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等)&#xff0c;按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【返回】数值 【示例】se…

mybatis3 oracle,Mybatis3中對oracle的批量插入

Mybatis批量插入的資料&#xff0c;很多都是mysql的&#xff0c;insert into ... values (),(),...醬紫。oracle中不支持這種語法&#xff0c;oracle中的批量插入是醬紫insert intoselcect... union all select ...。在這里http://my.oschina.net/u/232879/blog/118245有說明my…

python里 try里怎么用int函数_如何在不使用try / catch的情况下测试Python枚举中是否存在int值?...

测试价值变体1请注意&#xff0c;_member_names_具有一个名为in的成员(未记录...)&#xff1a;print(Fruit._value2member_map_)# {4: , 5: , 6: }您可以对照此地图测试值是否在_member_names_中&#xff1a;5 in Fruit._value2member_map_ # True7 in Fruit._value2member_map…

U盘安装可能会遇见UEFI的问题,使用easyBCD安装即可。

参考链接 CSDN博客 Tips 关于 (hd0,0) 如果出现 File not find的问题那么使用&#xff0c;(hd0,1) 后面的数字变一下&#xff0c;主要根据是&#xff0c;windows 的磁盘管理中的C盘的系统盘的序列。 转载于:https://www.cnblogs.com/eat-too-much/p/11120772.html

oracle truct,java向oracle 存储过程 传输数组

1 根据传参创建一个自定义类型create or replace type user_type force as object(age number,username nvarchar2(20),phone nvarchar2(20),syntime DATE)2 创建数组create or replace type user_type_arr as table of user_type3 创建存储过程create or replace procedure pr…

python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?

在下面的代码中 self.tableWidget.resize(self.width()-20,self.height()-20)self.tableWidget.move(10,20)这两行没有起作用&#xff1f;不知为何&#xff1f;from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import *from PyQ…

oracle sum详解,oracle sum()聚合函数

原文链接&#xff1a;https://blog.csdn.net/cizatu5130/article/details/100291347oracle sum()聚合函数2016-05-13 20:08:00 cizatu5130 阅读数 8Oracle 的sum聚合函数的功能就是求和(这里暂时不讨论分析函数用法)&#xff0c;一般用法不多讲&#xff0c;有个用法比较令人疑惑…

接口批量同步数据_千手接口平台+电商ERP,助德嵘大药房征战拼多多

拼多多对C端经营者来说&#xff0c;是一个处于红利期的第三方C端电商平台&#xff0c;进驻费比天猫低很多&#xff0c;而且流量成本也低&#xff0c;很多商家都跃跃欲试。但对于没有C端平台运营经验的商家&#xff0c;进驻后会发现几个"坑"&#xff1a;客单价低、退货…

FRM二级备考感想

真的是意料之中的Fail... 只有在Current Issues考得1&#xff0c;其他四门都是3... 复习的很不扎实&#xff0c;考前头脑里没有知识架构&#xff0c;考场无法对综合题目进行分析&#xff0c;直觉又从来靠不住。 同事说&#xff0c;二级不要想太多&#xff0c;就能过。 基础班视…

oracle静默文件建库,【配置上线】Oracle静默建库 for 11g

Oracle静默建库for 11g使用静默dbca创建数据库有两种方法&#xff1a;1)一种是根据oracle自身的数据库模板创建数据库(建议)&#xff0c;数据库模板位置$ORACLE_HOME/assistants/dbca/templates/*.dbcORACLE为我们提供了几个dbc模板&#xff1a;Data Warehouse数据仓库Transact…

word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法

word2vec介绍word2vec是google的一个开源工具&#xff0c;能够根据输入的词的集合计算出词与词之间的距离。它将term转换成向量形式&#xff0c;可以把对文本内容的处理简化为向量空间中的向量运算&#xff0c;计算出向量空间上的相似度&#xff0c;来表示文本语义上的相似度。…

【第55题】【062题库】2019年OCP认证062考试新题

55题、choose two Your database supports an online transaction processing (OLTP) workload in which one of the applications creates a temporary table for a session and performs transactions on it. This consumes a lot of undo tablespace and generates lots of …

oracle中 start with,Oracle中connect by...start with...的使用

大致写法&#xff1a;select * from some_table [where 条件1] connect by [条件2] start with [条件3];其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果&#xff0c;[where 条件1]可以不需要。另外一种写法&#xff1a;select * from some_table connect b…

【第56题】【062题库】2019年OCP认证062考试新题

56题、choose two In your database, USERS is the default permanent tablespace. Examine the commands and their outcome: SQL> CREATE USER user02 identified by us123 QUOTA 10M ON users; User created. SQL> GRANT create session, sysdba TO user02; Grant suc…

python 共享文件夹 密码_用不同的用户名和密码登录网络上的共享文件夹

网络共享时,有时不同的文件夹需要不同的用户名和密码登入,而windows已经记录了一个原来使用的用户名及密码默认使用这个用户名及密码不再弹出用户名及密码输入提示对话框.简易解决办法.如下:1、注销当前用户重新登入。(重启亦可)2、单击开始菜单&#xff0c;在运行对话框(快捷键…

php 接口有几种,【后端开辟】php接口有哪些范例?

接口是什么&#xff1f;运用接口(interface)&#xff0c;能够指定某个类必需完成哪些要领&#xff0c;但不须要定义这些要领的具体内容。接口是经由过程 interface 关键字来定义的&#xff0c;就像定义一个规范的类一样&#xff0c;但个中定义一切的要领都是空的。接口中定义的…

python福利彩随机_看大神如何用Python分析福利彩票的秘密,百万大奖不是梦!

相信福利彩票大家都买过吧&#xff0c;既然学爬虫为何不动手写个小程序抓一下呢&#xff0c;说不定还能发现福彩的秘密&#xff0c;本篇主要面向于对Python爬虫感兴趣的零基础的同学&#xff0c;实例为中彩网的福利3D彩票&#xff0c;比较有趣&#xff0c;小伙伴们一起动手开始…

java是编译型语言还是解释型语言?

首先拿python和C说明&#xff0c;python运行速度慢&#xff0c;和C程序相比非常慢&#xff0c;因为Python是解释型语言&#xff0c;你的代码在执行时会一行一行地被python解释器翻译成CPU能理解的机器码&#xff0c;这个翻译过程非常耗时&#xff0c;所以很慢。而C/C程序是编译…

typedef函数指针_C语言函数指针之回调函数

1 什么是回调函数&#xff1f;首先什么是“回调”呢&#xff1f;我的理解是&#xff1a;把一段可执行的代码像参数传递那样传给其他代码&#xff0c;而这段代码会在某个时刻被调用执行&#xff0c;这就叫做回调。如果代码立即被执行就称为同步回调&#xff0c;如果过后再执行&a…