为非 RESTful 传输设计线协议

https://blueprints.launchpad.net/zaqar/+spec/non-rest-wire-protocol

此规范代表为设计一个线协议需要完成的工作,该协议将尊重当前的 API v1.1,并且对非 RESTful 传输协议也很有用。

问题描述

我们目前有一个定义良好的协议,该协议在 HTTP 上运行良好。作为一个项目,我们期待欢迎更多适用于不同用例的传输,但我们没有支持它们的方法。此蓝图旨在定义这样的协议以及使其成为现实所需的工作。

提议的变更

基于此 wiki 页面[0]中定义的现有协议以及此处提出的粗略规范[1],我建议使用类似于以下内容的协议,并完成 api-layer 蓝图[2] 中启动的工作。

然而,此蓝图并不建议一个所有传输都应使用的 API 层。相反,它建议一个将由依赖于较低级别传输协议(如:websocket、原始 TCP 等)的传输使用的 API 层。

理想情况下,人们期望 Zaqar 支持现有的协议,如 STOMP、AMQP 等。虽然这可能或不可能取决于协议,但我们应该有一个坚持服务目标的协议,即简单、直接和轻量级。其他协议可以在未来作为单独的传输实现。

{
    "action": "post_message",
    "header": {
        "User-Agent": "python/2.7 killer-rabbit/1.2",
        "Date": "Wed, 2    8 Nov 2012 21:14:19 GMT",
        "Accept": "application/x-msgpack",
        "Client-ID": 30387f00-39a0-11e2-be4d-a8d15f34bae2,
        "X-Project-ID": 518b51ea133c4facadae42c328d6b77b,
        "X-Auth-Token": "7d2f63fd-4dcc-4752-8e9b-1d08f989cc00"
    },
    "body": {
        ...
    }
}

[0] https://wiki.openstack.org/wiki/Zaqar/specs/api/v1.1 [1] https://wiki.openstack.org/wiki/Zaqar/specs/zmq/api/v1 [2] https://blueprints.launchpad.net/zaqar/+spec/cross-transport-api-spec

备选方案

  • 什么都不做,让每个传输实现自己的协议。

  • 在不同的协议之上实现传输

实现

负责人

主要负责人

flaper87

里程碑

完成目标里程碑

Kilo-1

工作项

  • 定义线协议

  • 创建一个处理消息的 API 管理器

依赖项

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode