RESTful 服务相关技术与资源全解析
1. REST 开发框架与技术方向
Django 不仅仅是一个处理 HTTP 请求的框架,它和 Rails 类似,包含许多处理 Web 应用和 Web 服务设计中常见问题的子库。例如,它有类似 Rails 的 ActiveRecord 的对象关系映射器、内置的用户模型,还能将模型对象序列化为 JSON 表示。此外,Django 还有评论模型和生成联合供稿的工具,是 Python 实现 RESTful Web 服务的优秀基础。
在技术方向上,标签视图等有趣的功能会遵循类似的模式。通过一些工作,BookmarkDetail 类可以重构为一个更通用的资源类,用于处理多种不同类型的对象。
2. REST 相关标准与指南
2.1 HTTP 和 URI 标准
- HTTP 标准(RFC 2616) : http://www.w3.org/Protocols/rfc2616/rfc2616.html
- URI 标准(RFC 3986) : http://www.ietf.org/rfc/rfc3986.txt
- WEBDAV 标准(RFC 2518) : http://www.webdav.org/specs/rfc2518.html ,适用于对 HTTP 统一接口扩展感兴趣的场景。
- 万维网架构 :介绍了资源、表示以及用 URI 命名资源的概念, http://www.w3.org/2001/tag/webarch/
- 通用资源标识符 - 网络架构公理 : http://www.w3.org/DesignIssues/Axioms
2.2 RESTful 架构资源
- Fielding 论文 : Architectural Styles and the Design of Network - Based Software Architectures
- rest - discuss 邮件列表 : http://tech.groups.yahoo.com/group/rest - discuss/
- RESTwiki : http://rest.blueoxen.net/
- Joe Gregorio 的文章 :“REST and WS” http://bitworking.org/news/125/REST - and - WS 比较了 REST 和 WS - * 栈的技术,“How to create a REST Protocol” http://bitworking.org/news/How_to_create_a_REST_Protocol 介绍了如何创建 REST 协议。
- Duncan Cragg 的 The REST Dialogues : http://duncan - cragg.org/blog/post/getting - data - rest - dialogues/
- Paul Prescod 的 Common REST Mistakes : http://www.prescod.net/rest/mistakes/
2.3 超媒体格式标准
- XHTML 标准 : http://www.w3.org/TR/xhtml1/
- 微格式网站和维基 : http://microformats.org/ 和 http://microformats.org/wiki/
- URI 模板草案 : http://bitworking.org/projects/URI - Templates/
- Web 应用 1.0 标准 : http://www.whatwg.org/specs/web - apps/current - work/ ,其 Web Forms 2.0 部分 http://www.whatwg.org/specs/web - forms/current - work/ 极大地提高了 HTML 的超媒体能力。
- WADL 标准 : http://wadl.dev.java.net/
2.4 RESTful 开发框架
| 框架名称 | 特点 | 相关参考 |
|---|---|---|
| Ruby on Rails | 易于暴露 RESTful 资源 | http://rubyonrails.org/ ,《Agile Web Development with Rails》第二版 |
| Restlet 框架(Java) | 可建模任何 RESTful 架构 | http://www.restlet.org/ ,JSR 311 正在开发中 |
| Django(Python) | 是 Python 实现 RESTful Web 服务的优秀基础 | http://www.djangoproject.com/ ,免费的 Django 书籍正在开发中 |
2.5 REST 相关博客
- Mark Baker: http://www.markbaker.ca/blog/
- Benjamin Carlyle: http://www.soundadvice.id.au/blog/
- Joe Gregorio: http://bitworking.org/news/
- Pete Lacey: http://wanderingbarque.com/nonintersecting/
- Mark Nottingham: http://www.mnot.net/blog/
- Sam Ruby: http://www.intertwingly.net/blog/
3. 可使用的 RESTful 服务
3.1 服务目录
- ProgrammableWeb : http://programmableweb.com/ ,最流行的 Web 服务目录,跟踪可编程 Web 的 API 和混搭应用,但术语不够精确。
- servicereg.com : http://www.servicereg.com/ ,注册的服务较少,但有潜力,它不仅是目录,还是一个 Web 服务,其 Web 服务列表以支持 Atom 发布协议的“集合”资源形式暴露。
- MicroApps : http://microapps.org/ ,专注于可作为其他应用组件的 RESTful 应用,如 Amazon S3。
3.2 只读服务
- irrepressible.info : http://irrepressible.info/api ,提供一组联合供稿,帮助传播被各国政府审查的材料。
- Audioscrobbler : http://www.audioscrobbler.net/data/webservices/ ,暴露关于音乐和听众的大型数据集。
- Coral Content Distribution Network : http://www.coralcdn.org/ ,提供分布式 Web 资源缓存的简单接口。
以下是这些只读服务的简单流程图:
graph LR
A[客户端] --> B[irrepressible.info]
A --> C[Audioscrobbler]
A --> D[Coral Content Distribution Network]
3.3 读写服务
3.3.1 基于 Atom 发布协议的服务
| 服务名称 | 服务描述 | 相关链接 |
|---|---|---|
| Google 相关服务 | 许多 Google 网站暴露了名为 GData 的 APP 扩展,如 Blogger、Google Calendar、Google Notebook 等 | http://code.google.com/apis/gdata/ |
| Ning 应用 | Ning 上托管的应用暴露了 APP,详情见 | http://documentation.ning.com/sections/rest.php |
| 43 Things | 将生活目标列表作为 APP 集合暴露,同时也有 REST - RPC 混合服务 | http://www.43things.com/about/view/web_service_methods_atom |
| Blogmarks | 类似 del.icio.us 的社交书签服务,将书签列表作为 APP 集合暴露 | http://dev.blogmarks.net/wiki/DeveloperDocs |
| Lotus Connections 和 Lotus Quick | 暴露响应 APP 的资源 |
3.3.2 自定义 RESTful 资源服务
- Amazon S3 : http://aws.amazon.com/s3 ,可在 Amazon 服务器上存储数据,并通过 HTTP 或 BitTorrent 提供服务,按存储空间和带宽收费,商业模型稳健。
- Amazon Simple Queue Service : http://www.amazon.com/Simple - Queue - Service - home - page/b?ie=UTF8&node=13584001&me=A36L942TSJ2AJA ,可通过消息队列解耦系统的两个部分,用户可选择消息格式。
- BlinkSale API : http://www.blinksale.com/api ,暴露一组用于管理发票的 RESTful 资源。
- Stikkit API : http://stikkit.com/api ,暴露用于存储简短笔记的读写资源。
- CouchDb : http://www.couchdb.com/ ,是一个通过 RESTful Web 服务访问的“文档数据库”。
- Object HTTP Mapper : http://pythonpaste.org/ohm/ ,是一个用于将 Python 对象作为 RESTful 资源暴露的客户端和服务器。
- Beast 论坛包 : http://beast.caboo.se/ ,是一个 Rails 应用,暴露与 ActiveResource 兼容的 Web 服务,增强版 Dev’il 适用于项目协作, http://rubini.us/ 。
- linkaGoGo : http://www.linkagogo.com/rest_api.html ,是一个社交书签网站,其资源是包含书签的嵌套文件夹。
- OpenStreetMap : http://openstreetmap.org/ ,用于构建免费地图数据的项目,提供地球道路地图的 RESTful 接口, http://wiki.openstreetmap.org/index.php/REST 。
- Numbler 网络服务 : http://numbler.com/apidoc ,暴露用于电子表格、单元格和单元格范围的资源,其 PUT 使用可更符合资源导向。
- NEEScentral Web Services API : http://it.nees.org/library/data/neescentral - web - services - api.php ,是为地震工程师提供的网络服务,暴露实验、试验、传感器池等资源。
- Fozzy : http://microapps.sourceforge.net/fozzy/ ,是一个可安装的应用,为全文搜索提供 RESTful 接口,可集成到其他应用或服务中。
- Tasty : http://microapps.sourceforge.net/tasty/ ,为标签提供类似功能。
- MusicBrainz 网络服务 : http://wiki.musicbrainz.org/XMLWebService ,维护音乐专辑的元数据,使用重载 POST 代替 PUT,但仍以资源为导向。
- 现代版本控制系统 :如 Subversion 和 Arch,通过资源导向的 HTTP 接口操作,部分采用 WebDAV 和 DeltaV 等标准扩展 HTTP 方法,Arch 也可仅使用标准 HTTP 方法。
以下是部分自定义 RESTful 资源服务的交互流程图:
graph LR
A[客户端] --> B[Amazon S3]
A --> C[Amazon Simple Queue Service]
A --> D[BlinkSale API]
A --> E[Stikkit API]
4. HTTP 响应代码解析
4.1 响应代码的重要性
在人类 Web 中,很多应用在出现错误时仍发送 200(“OK”)响应代码,错误信息通过 HTML 实体主体描述,用户通过阅读文档来理解。但在可编程 Web 中,计算机程序无法仅通过查看文档可靠地理解其含义,HTTP 响应代码变得非常重要,它能告诉客户端如何处理实体主体中的文档,或在无法理解文档时该怎么做。客户端或中间代理(如防火墙)只需查看响应的前三个字节就能了解 HTTP 请求的情况。
4.2 标准响应代码概述
HTTP 标准有 41 个官方响应代码,WebDAV 等扩展还增加了更多代码。很多代码很少使用,部分代码区分度小,对于习惯人类 Web 的人来说可能会感到困惑。这里涵盖了 HTTP 标准的 41 个代码,以及 WebDAV 扩展的 207(“Multi - Status”)代码。
4.3 最少使用的响应代码
如果不想使用过多响应代码,使用以下三个代码仍可传达客户端处理响应所需的基本信息:
- 200(“OK”) :一切正常,实体主体中的文档(如果有)是某个资源的表示。
- 400(“Bad Request”) :客户端存在问题,实体主体中的文档(如果有)是错误消息,希望客户端能理解并解决问题。
- 500(“Internal Server Error”) :服务器存在问题,实体主体中的文档(如果有)是错误消息,但客户端无法解决服务器问题。
此外,还有四个在 Web 服务中特别常见的错误代码:
- 301(“Moved Permanently”) :当客户端触发导致资源 URI 更改的操作时发送,或者客户端请求旧 URI 时也会发送。
以下是这些最少使用响应代码的简单说明表格:
| 响应代码 | 含义 | 实体主体文档情况 |
| ---- | ---- | ---- |
| 200 | 一切正常 | 可能是资源表示 |
| 400 | 客户端问题 | 可能是错误消息 |
| 500 | 服务器问题 | 可能是错误消息 |
| 301 | 资源 URI 永久更改 | |
综上所述,RESTful 服务涉及众多开发框架、标准、资源和响应代码等方面的知识。了解这些内容有助于开发者更好地构建和使用 RESTful Web 服务,在可编程 Web 领域发挥更大的作用。
超级会员免费看
1119

被折叠的 条评论
为什么被折叠?



