没有项目描述
stone的Python项目详细描述
警告:正在重写文档。
定义一个api。使用代码生成器转换 在您的编程语言中指定对象和函数 选择。
石头由几个部分组成:
- An interface-description language (IDL) for specifying APIs.
- A command-line tool (^{tt1}$) that takes an API specification and generator module, and generates output.
- A Python-interface for defining new generators.
- A JSON-compatible serialization format.
斯通正在积极使用Dropbox v2 API。现在,唯一可用的发电机 是针对python的,但我们正在努力发布其他的 内部:swift、c、java、go、javascript和html文档。
动机
斯通是在Dropbox诞生的,当时人们已经很清楚 开发需要超越单个团队。公司是 在产品组的数量上有了很大的扩展 对于传统上处理核心文件操作的api团队来说是可伸缩的, 学习每种产品的复杂性并构建相应的api。
Stone的主要目标是分散Dropbox的API开发和所有权。 要想成功,它需要做几件事:
将api与sdk分离:dropbox为我们的移动设备提供第一方客户端 应用程序、桌面客户端和网站。每一个都在不同的 语言。此外,我们希望继续向第三方提供sdk, 其中一半使用我们的sdk。询问构建api的产品组是站不住脚的 还要在六种不同的特定语言中实现这些端点 伯克斯。没有分离,就像v1 api中的情况一样,sdk将 不可避免地落在后面。我们的解决方案是自动设置sdk 生成。
提高了API的可见性:现在,API不仅仅是 工程领域。产品经理、产品专家、合作伙伴, 销售和服务团队都需要有清晰准确的规范 我们的原料药。毕竟,api定义了dropbox的数据模型和功能。 在stone之前,api设计文档在实现过程中被更改 是真相的来源。
一致性和可预测性:一致性包括文档 时态到api模式对于使api可预测非常重要,因此 更容易使用。我们需要一种简单的方法来创建和执行模式。
json:为了方便第三方使用,我们需要我们的数据 要映射到json的类型。对于序列化效率高的情况 (空间和时间)很重要,可以尝试使用msgpack(alpha支持 在python生成器中提供)。也可以定义自己的 序列化方案,但在这一点上,您可以考虑使用 Protobuf。
假设
stone对用于生成api的协议层没有任何假设 请求和返回响应;其第一个用例是dropbox v2 api 通过http操作。stone不附带也不强制任何特定的rpc 框架。
stone对target中支持的数据类型做了一些假设 编程语言。假设有能力 字典(无序字符串键->;值)、列表、数字类型和 串。
stone假设路由(或api端点)可以有它的参数和 定义的结果类型彼此不相关。换句话说, 响应类型不会根据对终结点的输入而更改。安 对于错误响应,将提供此规则的异常。
安装
下载或克隆stone,并在其根目录中运行以下命令:
$ sudo python setup.py install
这将在您的路径中安装一个脚本stone,该脚本可以从 命令行:
$ stone -h
备选方案
如果选择不使用上述方法安装stone,则需要 为了确保您拥有python包ply和six,可以是 我安装通过pip:
$ pip install ply>=3.4 six>=1.3.0
如果stone包在pythonpath中,则可以替换stone 使用python -m stone.cli如下:
$ python -m stone.cli -h
如果您的计算机上有stone包,但没有安装,或者 将其位置添加到pythonpath中,您可以使用以下命令:
$ PYTOHNPATH=path/to/stone python -m stone.cli -h