1. 引言
1. 引言 (Introduction)
Web browsing 以外的应用经常将 HTTP [HTTP] 用作基础, 这种做法有时称为创建 "HTTP-based API", "REST API", 或简称 "HTTP API". 这样做有多种原因, 包括:
-
implementer, specifier, administrator, developer 和 user 都熟悉 HTTP;
-
存在多种 client, server 和 proxy implementation;
-
易于使用;
-
Web browser 可用;
-
可复用 authentication 和 encryption 等现有机制;
-
目标 deployment 中存在 HTTP server 和 client; 以及
-
它能够穿越 firewall.
这些 protocol 往往是 ad hoc 的, 只打算部署在一个或少数几个 server 上, 并由有限的一组 client 使用. 因此, 围绕定义 HTTP-based API 形成了一套偏向这些条件的实践和工具.
然而, 当此类应用有多个独立 implementation, 部署在多个未协调的 server 上, 并由多样化的 client 使用时 (标准化工作定义的 HTTP API 通常如此), 面向有限 deployment 的工具和实践可能变得不适用.
这种不匹配很大程度上是因为 API 的 client 和 server 会以不同速度实现和演进, 从而需要具有不同 feature 和 version 的 deployment 共存. 因此, 面向这类 deployment 的 HTTP-based API 设计者需要更仔细地考虑如何处理 service extensibility, 以及如何适应不同 deployment requirement.
更一般地说, 使用 HTTP 的 application protocol 面临许多设计决策, 包括:
-
是否应定义新的 URI scheme? 是否使用新的 port?
-
是否应使用标准 HTTP method 和 status code, 还是定义新的 method 和 code?
-
如何从 HTTP 的使用中获得最大价值?
-
它如何与 HTTP 的其他用法共存, 尤其是 Web browsing?
-
如何避免 interoperability problem 和 "protocol dead end"?
Section 2 定义本文档何时适用, Section 3 概述需要保留的 HTTP 重要属性, Section 4 包含使用 HTTP 的 application 规范的 best practice.
本文档主要用于指导 IETF 定义使用 HTTP 并部署在 Internet 上的 application protocol, 但也可能适用于其他情况. 注意, 本文中的 requirement 不一定适用于 generic HTTP extension 的开发.
本文档废弃 [RFC3205], 以反映期间关于 HTTP 的经验和发展.