=encoding UTF-8 =head1 NAME OpenResty::Spec::REST_cn - OpenResty REST 协议白皮书(草案) =head1 AUTHOR Agent Zhang (章亦春) Carrie Zhang (张皛珏) =head1 VERSION CREATED: Nov 19, 2007 LAST MODIFIED: Jul 18, 2008 VERSION: 0.20 =head1 LICENSE Copyright (c) 2007 Yahoo! China (中国雅虎公司). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found at http://www.gnu.org/licenses/fdl.html =head1 DESCRIPTION 本文定义了 OpenResty 基于 REST 风格的 web service API 协议组。 =head2 DESIGN GOALS =over =item * 确保对于简单的需求,API 足够简单;同时又能满足很复杂的高级需求。 "Make simple things easy, hard things possible" -- Larry Wall API 应能映射到绝大部分常见的 SQL 请求语句 ,但应能阻止 SQL injection 的发生。 =item * API 应该足够直观和友好,应尽量做到 DWIM (Do What I mean). =item * 确保 API 能够在绝大多数支持 HTTP 1.1 和 cookie 的环境中使用。包括但不限于网页中的 Javascript, 应用程序中的 Perl, C/C++, Java, C#, VB, 以及纯命令行工具 wget 和 curl 等等。 普通网页中的 Javascript 代码应能通过 AJAX 跨域方式访问 100% 的 API. =item * 来自客户的 API 访问请求应保持无状态。单个请求中应包含所有信息(除了用户身分认证可以存储在 cookie 中供反复使用以外)。 =item * 来自服务器的数据格式(XML,JSON,YAML)应能由客户自由控制,同时客户能指定编码(charset). =item * API 在形式上必须保持统一和一致。同时单次返回的结果中应包含足够的导航信息,帮助用户进行后续请求,以取得与之相关的其他数据。 =item * 出于安全性方面的考虑,数据存储应采用类似 wiki 和 Subversion 版本控制方式,应提供接口允许用户拄撤销和恢复临近一段时间的操作或数据. =item * API 应支持自省能力。用户可以通过 API 获得有关 Models, Actions, 和 API 本身的帮助信息. =back =head2 DESIGN BACKGROUND 本 API 的设计基于美国 Best Practical 公司的 Jifty 框架中所包含的 REST Web Service 接口设计 ( L )。 =head1 PROTOCOL BASIS 我们的 API 基于最基本的 HTTP 1.1/1.0 协议。特别地,我们充分利用了 GET, POST, PUT, DELETE 这几种基本的 HTTP 方法来简化我们的 API。 在本文中,除非特别说明,将总是假设使用 C 模式。 =head1 HTTP METHODS 本接口使用下列 HTTP 1.1 方法: =over =item GET 一般用于查询和读取操作,类似 SQL 语言中的 C