restful目前来说是完美的(python有什么高性能的restful模块没)

:暂无数据 2026-04-19 06:00:02 0
大家好,如果您还对restful目前来说是完美的不太了解,没有关系,今天就由本站为大家分享restful目前来说是完美的的知识,包括python有什么高性能的restful模块没的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

python有什么高性能的restful模块没

  RESTful架构,目前是比较流行的一种互联网软件架构。REST,即Representational State Transfer的缩写。
***隐藏网址***
  GET用来获取资源,POST用来新建资源、更新资源,PUT用来更新资源,DELETE用来删除资源。
***隐藏网址***
  REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。他的贡献很多,可以了解一下。本人工作的方向是SDN,也算是比较潮的东东,其中floodlight就用到了restful框架。
  开发者为软件开发出一些功能,并提供URI api,用户就可以利用浏览器、curl等工具通过提供的URI从软件中获得想要的信息或者设置软件的功能。
  对于发开者来说,就是提供URI和URI对应的资源,并将他们对应上,类似dicts={’/path?’:resource}。
***隐藏网址***
  下面来个很简单的例子,因为对于真正功能强大的restful来说,这个例子有几点不足,但是作为简单的演示,应该够了。
  复制代码 代码如下:
  #-*-coding:UTF-8-*-
  import socket,sys,urllib
  from BaseHTTPServer import *
  class Restful(BaseHTTPRequestHandler): #所有rest的父类def __init__(self,request, client_address, server):
  BaseHTTPRequestHandler.__init__(self,request, client_address, server)self.dp=None
  self.router=None
  def basepath(self):
  pass
  def getresetlet(self):
  pass
  def send(self,src):
  self.send_resp***e(200)
  self.send_header("Content-type", "text/html")self.end_headers()
  self.wfile.write(src)
  self.wfile.close()
  def done(self):
  self.dp=self.basepath()
  self.router=self.getrestlet()
  class Test(Restful): #测试1
  def test(self): #这就是一个资源
  return "{\"date\":\"2013-11-19\"}"
  def do_GET(self): #重写get方法给了通过客户端请求的url找到对应的资源self.done()
  for key in self.router.keys():
  tmp=self.dp+key
  if tmp in self.path:
  self.send(self.router()) #执行资源
  def basepath(self): #这个简单的说就是和下面函数中的路径配合,即/wm/timereturn "/wm"
  def getrestlet(self): #这儿就是URI与资源对应,这里只有test资源,可以注册多个rr={}
  rr=self.test
  return rr
  class testjson(Restful): #测试2
  def testjson(self,vpc,vr): #这里比测试1复杂些,因为参数的值需要从url中获得src1="{\"vpc\":1,\"vrouter\":3,\"day\":
  cmpvpc="\"vpc\":"+vpc
  cmpvr="\"vrouter\":"+vr
  for k in tlist:
  if cmpvpc in k and cmpvr in k:
  return k
  def firewall(self):
  return "{\"filter\":,\"acl\":{\"accept\":123,\"reject\":321}}"def do_GET(self): #重写GET,解析url,这里的self.path类似:/ins/json?vpc=1&vrouter=3self.done()
  print self.path
  if ’vpc’ in self.path and ’vrouter’ in self.path:
  query=None
  if ’?’ in self.path:
  query = urllib.splitquery(self.path)
  key=query+’?’
  param=query.split(’&’) #解析获得属性信息,传递给资源函数pdict={}
  for p in param:
  tmp=p.split(’=’)
  pdict
  for k in self.router.keys():
  if k in key:
  self.send(self.router)) #执行资源elif ’firewall’ in self.path:
  self.send(self.router())
  else:
  self.send("{}")
  def basepath(self):
  return "/ins"
  def getrestlet(self):
  rr={}
  rr=self.testjson #注册资源
  rr=self.firewall
  return rr
  try:
  server=HTTPServer((’’,8084),testjson) #测试2server.serve_forever()
  except KeyboardInterrupt:
  sys.exit(0)
  如果运行上面的程序,运行的是测试2,运行后此程序**8084。
***隐藏网址***
  这里仅仅作为演示,程序有有许多不足。对于好的框架,注册资源不应该和资源在同一个类中,basepath()与getrestlet()不应该在实现的资源类里(也就是上面的测试里),也使router没起作用。
  应该在另一个类里注册,这样可以通过不同的URI,两个测试都应该能够运行;还有就是使用的python自带的BaseHTTPServer模块,并不适合做restful。
  但是工作过程大体就是这样,后续有时间会写个python版的restful简易框架。

举例说明,RESTful 到底有哪些好处

好处:

  • REST规范:强调HTTP应当以资源为中心,并且规范了资源URI的风格;

  • 2.规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;

  • 3.遵循REST规范的Web应用将会获得下面好处:

  • a.URL具有很强可读性的,具有自描述性;

    b.资源描述与视图的松耦合;

    c.可提供OpenAPI,便于第三方系统集成,提高互操作性;

    d.如果提供无状态的服务接口,可提高应用的水平扩展性

restful在什么的诞生背景

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。
网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互联网环境中使用的软件。
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。但是,到底什么是RESTful架构,并不是一个容易说清楚的问题。下面,我就谈谈我理解的RESTful架构。
1. 起源
REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。
他这样介绍论文的写作目的:
"本文研究计算机科学两大前沿----软件和网络----的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。"
(This dissertation explores a junction on the frontiers of two research disciplines in computer science: software and networking. Software research has long been concerned with the categorization of software designs and the development of design methodologies, but has rarely been able to objectively evaluate the impact of various design choices on system behavior. Networking research, in contrast, is focused on the details of generic communication behavior between systems and improving the performance of particular communication techniques, often ignoring the fact that changing the interaction style of an application can have more impact on performance than the communication protocols used for that interaction. My work is motivated by the desire to understand and evaluate the architectural design of network-based application software through principled use of architectural c***traints, thereby obtaining the functional, performance, and social properties desired of an architecture. )
2. 名称
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。
要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计。
3. 资源(Resources)
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。
4. 表现层(Representation)
"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。
5. 状态转化(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
6. 综述
综合上面的解释,我们总结一下什么是RESTful架构:
每一个URI代表一种资源;
客户端和服务器之间,传递这种资源的某种表现层;
客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
7. 误区
RESTful架构有一些典型的设计误区。
最常见的一种设计错误,就是URI包含动词。因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。
举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。
如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:POST /accounts/1/transfer/500/to/2
正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:
POST /transaction HTTP/1.1
Host: 127.0.0.1
  
from=1&to=2&amount=500.00
另一个设计误区,就是在URI中加入版本号:
***隐藏网址***
***隐藏网址***
***隐藏网址***
因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services):
Accept: vnd.nowamagic-net.foo+json; version=1.0
Accept: vnd.nowamagic-net.foo+json; version=1.1
Accept: vnd.nowamagic-net.foo+json; version=2.0
***隐藏网址***

为什么说restful更易于实现缓存机制

无状态是针对于“状态”来说的。一个WEB应用协议中的“状态”指的是,为两个相互关联的用户交互操作保留某种公共信息,例如用户登录信息,工作流等。这些信息具有不同作用域,如page,request,session,application等。通常由服务器负责保存这些信息。“无状态”的概念逐渐流行,得益于分布式系统的发展。首先,无状态请求易于实现负载均衡。在分布式web系统下,有多个可用服务器,每个服务器都可以处理客户端请求。传统的有状态请求,因为状态信息只保存在第一次发起请求的那台服务器上,之后的请求都只能由这台服务器来处理,服务器无法自由调度请求。无状态请求则完全没有这个限制。其次,无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用服务器来处理,而有状态的请求则会因为存储请求状态信息的服务器宕机而承担状态丢失的风险。需要注意的是,“状态"指请求的状态,而不是资源的状态。Restful风格的无状态约束要求服务器不保存请求状态,如果确实需要维持用户状态,也应由客户端负责。传递usercredentials是Restful的,而传递sessionID是unRestful的,因为session信息保存在服务器端。

restful哪种实现方式性能最好

  1. 基于RESTful 的几种实现
    1.1. Rails
    Ruby on Rails是新兴的敏捷Web开发框架,在动态语言Ruby的支持下,Rails以新鲜的视角告诉我们Web开发是简单而快乐的。Rails对 RESTful Web Service的开发作了极大的封装和简化,这对开发人员来说是一个强大的工具。而且即将发布的Rails 2.0将全面基于REST。
    1.2. Axis2
    Apache Axis2是传统的Java Web Service框架Axis的下一代版本。从最初的Apache Axis和Apache SOAP到目前的Axis2,经历了大量变革和发展。相对以前的版本,Axis2更灵活、更高效、更简单。作为Java端官方和传统Web Service框架,在REST与SOAP的硝烟弥漫、战火纷飞的状况下,Axis2尝试同时支持SOAP和REST,采用了WSDL2.0中将REST 与Web服务结合的工作成果。
    1.3. Django
    Django是基于python语言的敏捷Web和Web服务开发框架,它的设计与Rails十分类似,只不过简化和封装稍少一些。
    1.4. JSR 311: JAX-RS
    JAX-RS(JSR 311,Java API for XML-RESTful Web Services)是基于annotation的实现方式,我们通过annotation的方式把一个java class标注成RESTful web service,并把它的方法标注成HTTP的CRUD。相关的annotation有@path @Produces@GET @POST @DELETE @PUT @PathParam等,对java开发人员在使用起来比较方便。
    目前已经有很多现成的实现,比如Jersey Apache CXF JBoss RESTEasy
    1.5. 其他支持RESTful的Java框架
    ***隐藏网址***
    ***隐藏网址***
    ***隐藏网址***
    ***隐藏网址***
    ***隐藏网址***

    RESTEasy的性能要好于 Jersey,无论哪种嵌入式JEE容器。

    Jersey+Grizzly2和Jersey+Jetty, dropwizard性能差别不大

    dropwizard底层实际是Jersey+Jetty,性能结果也和Jersey+Jetty一样

    RESTEasy+netty (netty3)的结果并没有优于RESTEasy+undertow.这出乎我的意料,可能CPU和Memory占用上会好一些

    RESTEasy+netty4的性能远远低于RESTEasy+netty3,这出乎我的意料。或许因为Netty线程池的改变。

    ***隐藏网址***

    Spring Boot太厚重了,使用Spring MVC的语法,性能只有Jersey的一半。

    Vert.x底层使用Netty,可以使用Java 8 Lambda语法,也提供了其它语言的支持,但是性能看起来不是太好,而且随着并发量增大吞吐率也随之下降。

理解python有什么高性能的restful模块没,是打开restful目前来说是完美的大门的第一把钥匙。现在,钥匙在你手中了。
本文编辑:admin

更多文章:


ajax请求数据失败(我用Ajax请求数据,但是老不成功提示如下图:然后下面是代码)

ajax请求数据失败(我用Ajax请求数据,但是老不成功提示如下图:然后下面是代码)

关于ajax请求数据失败,有一个概念至关重要,那就是我用Ajax请求数据,但是老不成功提示如下图:然后下面是代码。它为何如此重要?且听我们慢慢道来。

2026年4月19日 08:20

滑块的用途与作用(滑块是什么,有什么应用)

滑块的用途与作用(滑块是什么,有什么应用)

就像学骑车需要掌握平衡一样,理解滑块的用途与作用的窍门,恰恰在于把握好滑块是什么,有什么应用这个“平衡点”。

2026年4月19日 08:00

二进制编码转换器工具(求十进制数和float二进制码互相转换的软件或者excel函数)

二进制编码转换器工具(求十进制数和float二进制码互相转换的软件或者excel函数)

下面,我们将通过二进制编码转换器工具的概述、求十进制数和float二进制码互相转换的软件或者excel函数的详解以及总结展望三个部分,为您系统梳理这一主题。

2026年4月19日 07:40

linux删除日志文件命令(linux日志清理)

linux删除日志文件命令(linux日志清理)

前几天,一位朋友问我:linux删除日志文件命令到底该怎么学?我只回了他三个字:抓住linux日志清理。今天就来详细说说为什么。

2026年4月19日 07:20

threadripper怎么读(目前**的电脑配置是怎样的)

threadripper怎么读(目前**的电脑配置是怎样的)

在深入了解threadripper怎么读的路上,目前**的电脑配置是怎样的就像一道绕不开的坎。别担心,本篇攻略将助你轻松跨越。

2026年4月19日 07:00

shadow puppet(我们中国的传统文化有许多就好像剪纸 英文怎么写)

shadow puppet(我们中国的传统文化有许多就好像剪纸 英文怎么写)

今天这份关于shadow puppet的指南,将用80%的篇幅讲透我们中国的传统文化有许多就好像剪纸 英文怎么写这个决定成败的细节,绝对让你不虚此行。

2026年4月19日 06:40

javascript网页去广告代码(javascript 右下角 广告代码)

javascript网页去广告代码(javascript 右下角 广告代码)

最新数据显示,关注javascript网页去广告代码的人中,超过70%都对javascript 右下角 广告代码抱有浓厚兴趣。本文将满足这一核心需求。

2026年4月19日 06:20

restful目前来说是完美的(python有什么高性能的restful模块没)

restful目前来说是完美的(python有什么高性能的restful模块没)

大家好,如果您还对restful目前来说是完美的不太了解,没有关系,今天就由本站为大家分享restful目前来说是完美的的知识,包括python有什么高性能的restful模块没的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始

2026年4月19日 06:00

结构体成员指针(如何访问结构体指针的结构体指针成员)

结构体成员指针(如何访问结构体指针的结构体指针成员)

关于结构体成员指针,有一个概念至关重要,那就是如何访问结构体指针的结构体指针成员。它为何如此重要?且听我们慢慢道来。

2026年4月19日 05:40

ospf报文类型有哪些(OSPF的3种数据库、4种接口类型、5种报文类型都是哪些)

ospf报文类型有哪些(OSPF的3种数据库、4种接口类型、5种报文类型都是哪些)

本文是您理解ospf报文类型有哪些的最后一站。我们将通过剖析OSPF的3种数据库、4种接口类型、5种报文类型都是哪些,帮你打通任督二脉,彻底领悟。

2026年4月19日 05:20

最近更新

javascript网页去广告代码(javascript 右下角 广告代码)
2026-04-19 06:20:02 浏览:0
热门文章

floatleft是什么意思(displayflex和floatleft的区别)
2026-04-17 04:40:03 浏览:0
标签列表