您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > RESTFUL API 设计开发
Twitter:hooraceEmail:longtask@gmail.comBlog:介绍实例一些资源一些数据在这个流量=金钱的时代为什么要了解REST:API数据角度从数据上来看:电子商务的程序员不了解RESTAPI可以吗?为什么要了解REST:同行数据角度=mashups搞电子商务的,不知道亚马逊联盟是不是觉得有点面子挂不住?为什么要了解REST:AmazoneCommerceVSTaobaoTopREST+SOAP(85:15)RESTHttp协议你知道多少?1:http的请求方法有多少?2:请求包头你知道多少?3:返回码呢?什么是RESTRepresentationalStateTransfer(表述性状态转移),简称REST,来自RoyFielding的博士论文:《ArchitecturalStylesandtheDesignofNetwork-basedSoftwareArchitectures》(《架构风格与基于网络的软件架构设计》)RoyFielding是DaySoftware公司的首席科学家,Apache软件基金会的合作创始人,在美国加洲大学欧文分校获得博士学位,HTTP、URI等Web标准的主要设计者什么是REST(续)REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移(RepresentationalStateTransfer)。REST是一种的分布式应用架构风格,HTTP1.1是基于REST架构风格设计的。其他分布式引用架构风格1:分布式对象(RMI/EJB/HSF)2:远程过程调用(SOAP/XML-RPC/JSON-RPC/HESSION)指导思想:REST的架构约束1.客户端-服务器2.无状态3.缓存4.统一接口5.分层系统6.按需代码(可选约束,我没搞懂)指导思想(续):REST的五条关键原则1.为所有“事物”定义ID(URI)2.将所有事物链接在一起3.使用标准方法4.资源多重表述5.无状态通信为什么要基于API开发1.WEB是开放的时代,twitter的30W个客户端构造了操作壁垒,让google,facebook无法追赶;2.API让web,手机客户端,桌面多种操作成为可能,程序员分工更加明确,切降低了开发成本;3.软件开发依赖解耦4.让编程语言发挥各自的优势。REST导致的变化RESTFULAPI一种基于http协议和rest架构策略的一种简单webservice,包含以下特征:1.Web服务的基本URI,如服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。3.Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。4.API必须是超文本驱动HTTP在RESTFULAPI中的典型应用RESOURCEGETPOSTPUTDELETEPATCH方法:幂等的,POST是不幂等的POST/PUT/DELETE/PATCH方法:不安全的,GET是安全的简单实例:Python框架Web.py的实现RESTFULAPI然后配置urls=('/item/(.*)',‘item')。好吧,我承认这是我见过的最简单实现restfulAPI的框架!详细地址:思考1:其实都可以GET实现,都用GET方式的害处?2:POST也可以实现很多功能,POST方式的害处?3:Servlet规范JSR154,JSR315定义了哪些方法?JavaAPIforRESTfulWebServices:JSR-311JSR-311(JAX-RS:JavaAPIforRESTfulWebServices)旨在定义一个统一的规范,使得Java程序员可以使用一套固定的接口来开发REST应用。特征:使用POJO编程模型基于Annotation的配置集成了JAXB,JAX-RS提供的标注将资源类@Path,标注资源类或方法的相对路径@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型@Produces,标注返回的MIME媒体类型@Consumes,标注可接受请求的MIME媒体类型@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。代码示例@GET@Produces({MediaType.APPLICATION_JSON})@Path(/book/{id})publicBookgetBook(@PathParam(id)Stringid){returnnewBook(huhu,huhu);}@PUT@Path(/book/{name})publicvoidupdateBook(@PathParam(name)PathSegmentbook){IteratorBookit=books.iterator();Stringname=String.valueOf(book.getMatrixParameters().get(name));Stringcontent=String.valueOf(book.getMatrixParameters().get(content));while(it.hasNext()){Bookbooktmp=it.next();if(name.equals(booktmp.getName())){booktmp.setContent(content);break;}}}访问示例GET://://://的实现ApacheCXF,开源的Web服务框架。Jersey,由Sun提供的JAX-RS的参考实现。RESTEasy,JBoss的实现。Restlet,由JeromeLouvel和DavePawson开发,是最早的REST框架,先于JAX-RS出现题外话:Spring3.0直接支持restful风格的编码了。您选择框架要考虑的产品成熟度,是否有成熟团队,社区文档是否齐全和常见框架的集成(例如:Spirng)对流行协议的支持(Atom,Oauth)配置的简易程度性能是否容易上手……前置URI流程授权方式简单的session+secret_key的模式oauth自定义的其他方式开始阶段JAVA框架选择JSR311的实现文档齐全支持spring,oauth,atom支持jetty的集成配置有点郁闷考虑cache:twitter示例考虑cache:twitter示例(续)返回数据1:xml•序列化耗时•返回的数据把显得有点大很想说的是twitterstreamapi抛弃了xml2:Json•简单清晰•数据包小提示:不要json-lib,选择jackson来序列化josnTaobao,amazon都返回json,xml2种格式3:atomAtom供稿格式(AtomSyndicationFormat)是用于网站消息来源,基于XML的文档格式。GoogleDataAPI和豆瓣都是基于Atom格式的返回4:RSS测试框架自带的client的API测试CURLFirefox+Poster资源推荐Fielding的博士论文:JSR311:=311RFC2616书籍推荐Q&A个人一小步,产品一大步!
本文标题:RESTFUL API 设计开发
链接地址:https://www.777doc.com/doc-3993039 .html