没有项目描述

stone的Python项目详细描述


警告:正在重写文档。

https://travis-ci.org/dropbox/stone.svg?branch=master

定义一个api。使用代码生成器转换 在您的编程语言中指定对象和函数 选择。

石头由几个部分组成:

  1. An interface-description language (IDL) for specifying APIs.
  2. A command-line tool (^{tt1}$) that takes an API specification and generator module, and generates output.
  3. A Python-interface for defining new generators.
  4. 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包plysix,可以是 我安装通过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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么参数。getType()。isInstance(HttpServletRequest.class)返回值为false,但use“==”为true   使用Java的文本文件中的简单列表   linux Java创建具有特定所有者(用户/组)的文件和目录   java我试图解析一个文本文件,以计数唯一字符串的数量,并打印一些关于这些字符串的信息   雅加达ee如何使用JavaEE6@Resource注释   java从数据库中获取所有值,并将其存储在字符串数组中   java需要ArrayList中的单个数组   java变量id可能未使用lombok初始化Spring引导控制器   JavaS3客户端。读取超过文件大小时的GetObject行为   java在另一个活动列表视图中显示JSONObject   java spring引导fat jar注册到带有奇怪端口的eureka   java如何与mongoDB建立Android Studio连接?   java LinkedIn OAuth2/oauth/v2/accessToken响应未返回“令牌类型”   java如何在jtree中只列出非隐藏和非系统文件   Mybatis批量将Java BigDecimal插入SQL Server decimal(18,2)无法正常工作   java Hibernate Criteria Builder:如何按可为空的实体属性进行筛选?   如果涉及方法内变量的范围,python与java是否不同?   java如何实现web服务客户端,该客户端通过基于NTLM身份验证的身份验证连接到外部web服务   java使Jackson在反序列化期间无法将double转换为int