• 1. RESTFUL API设计开发Twitter :hoorace Email :longtask@gmail.com Blog :www.longtask.com1.0beta0
  • 2. 目录什么是RESTRESTFUL API介绍实例一些资源一些数据
  • 3. 在这个流量=金钱的时代
  • 4. 为什么要了解REST:API数据角度从数据上来看:电子商务的程序员不了解REST API可以吗?
  • 5. 为什么要了解REST:同行数据角度http://www.programmableweb.com/apis/directory/1?sort=mashups搞电子商务的,不知道亚马逊联盟是不是觉得有点面子挂不住?
  • 6. 为什么要了解REST:Amazon eCommerce VS Taobao TopREST + SOAP (85:15)REST
  • 7. Http协议你知道多少?1:http的请求方法有多少? 2:请求包头你知道多少? 3:返回码呢?
  • 8. 什么是RESTRepresentational State Transfer(表述性状态转移),简称REST,来自Roy Fielding的博士论文:《Architectural Styles and the Design of Network-based Software Architectures》(《架构风格与基于网络的软件架构设计》) Roy Fielding是Day Software公司的首席科学家,Apache软件基金会的合作创始人,在美国加洲大学欧文分校获得博士学位,HTTP、URI等Web标准的主要设计者
  • 9. 什么是REST(续)REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移(Representational State Transfer)。 REST是一种的分布式应用架构风格,HTTP1.1是基于REST架构风格设计的。 其他分布式引用架构风格 1:分布式对象(RMI / EJB /HSF) 2:远程过程调用(SOAP/XML-RPC/JSON-RPC/HESSION)
  • 10. 指导思想:REST的架构约束客户端-服务器 无状态 缓存 统一接口 分层系统 按需代码(可选约束,我没搞懂)
  • 11. 指导思想(续):REST的五条关键原则为所有“事物”定义ID (URI) 将所有事物链接在一起 使用标准方法 资源多重表述 无状态通信
  • 12. 为什么要基于API开发WEB是开放的时代,twitter的30W个客户端构造了操作壁垒,让google,facebook无法追赶; API让web,手机客户端,桌面多种操作成为可能,程序员分工更加明确,切降低了开发成本; 软件开发依赖解耦 让编程语言发挥各自的优势。
  • 13. REST导致的变化
  • 14. RESTFUL API一种基于http协议和rest架构策略的一种简单web service,包含以下特征:Web服务的基本URI,如 http://www.douban.com/feed/review/latest Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等。 Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。 API必须是超文本驱动
  • 15. HTTP在RESTFUL API中的典型应用RESOURCEGETPOSTPUTDELETEPATCH http://www.douban.com/feed/review/latestselectinsertupdatedeletePartial updateGET/PUT/DELETE/PATCH方法:幂等的,POST是不幂等的 POST/PUT/DELETE/PATCH方法:不安全的,GET是安全的
  • 16. 简单实例:Python框架Web.py的实现 RESTFUL API然后配置urls = ('/item/(.*)', ‘item') 。 好吧,我承认这是我见过的最简单实现restful API的框架!详细地址:http://johnpaulett.com/2008/09/20/getting-restful-with-webpy/
  • 17. 思考1:其实都可以GET实现,都用GET方式的害处? 2:POST也可以实现很多功能,POST方式的害处? 3:Servlet规范JSR154,JSR315定义了哪些方法?
  • 18. Java API for RESTful Web Services: JSR-311JSR-311(JAX-RS:Java API for RESTful Web Services)旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用。特征: 使用 POJO 编程模型 基于Annotation的配置 集成了 JAXB,
  • 19. 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。
  • 20. 代码示例@GET @Produces({MediaType.APPLICATION_JSON}) @Path("/book/{id}") public Book getBook(@PathParam("id") String id){ return new Book("huhu","huhu"); } @PUT @Path("/book/{name}") public void updateBook(@PathParam("name") PathSegment book){ Iterator it = books.iterator(); String name = String.valueOf(book.getMatrixParameters().get("name")); String content = String.valueOf(book.getMatrixParameters().get("content")); while(it.hasNext()){ Book booktmp = it.next(); if(name.equals(booktmp.getName())){ booktmp.setContent(content); break; } } }
  • 21. 访问示例GET https://www.google.com/calendar/feeds/userID/private-magicCookie/full POST https://www.google.com/calendar/feeds/default/private/full PUT https://www.google.com/calendar/feeds/default/owncalendars/full/calendarID DELETE https://www.google.com/calendar/feeds/default/owncalendars/full/calendarID PATCH /calendar/feeds/default/private/full/eventID
  • 22. JAX-RS的实现Apache CXF,开源的Web服务框架。 Jersey, 由Sun提供的JAX-RS的参考实现。 RESTEasy,JBoss的实现。 Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现题外话:Spring3.0直接支持restful风格的编码了。
  • 23. 您选择框架要考虑的产品成熟度,是否有成熟团队,社区 文档是否齐全 和常见框架的集成(例如:Spirng) 对流行协议的支持(Atom , Oauth) 配置的简易程度 性能 是否容易上手 ……
  • 24. 前置URI
  • 25. 流程鉴权业务处理返回数据
  • 26. 授权方式简单的session + secret_key的模式oauth自定义的其他方式
  • 27. 开始阶段JAVA框架选择JSR311的实现 文档齐全 支持spring ,oauth,atom 支持jetty的集成配置有点郁闷
  • 28. 考虑cache:twitter示例
  • 29. 考虑cache:twitter示例(续)
  • 30. 返回数据1:xml 序列化耗时 返回的数据把显得有点大 很想说的是twitter stream api抛弃了xml 2:Json 简单清晰 数据包小 提示:不要json-lib , 选择jackson来序列化josn Taobao,amazon都返回json ,xml2种格式 3:atom Atom供稿格式(Atom Syndication Format)是用于网站消息来源,基于XML的文档格式。 Google Data API 和豆瓣都是基于Atom格式的返回 4:RSS
  • 31. 测试框架自带的client的API测试CURLFirefox + Poster
  • 32. 资源推荐Fielding的博士论文: http://www.redsaga.com/opendoc/REST_cn.pdf http://www.infoq.com/cn/articles/rest-introduction JSR311: http://jcp.org/en/jsr/detail?id=311 http://www.jboss.org/resteasy/docs http://www.infoq.com/cn/articles/roa-rest-of-rest http://oauth.net/ RFC2616
  • 33. 书籍推荐
  • 34. Q&A个人一小步,产品一大步!