提问人:deceze 提问时间:12/28/2010 最后编辑:deceze 更新时间:10/3/2011 访问量:11168
使用 Sphinx 的 RESTful Web 服务 API 文档 [已关闭]
RESTful web service API documentation with Sphinx [closed]
问:
闭。这个问题正在寻求有关书籍、工具、软件库等的建议。它不符合 Stack Overflow 准则。它目前不接受答案。
我们不允许向读者、工具、软件库等寻求推荐的问题。您可以编辑问题,以便用事实和引文来回答。
5年前关闭。
使用 ReST/Sphinx 标记 RESTful Web 服务的方法/URL 的最佳方法是什么?是否有适合使用可能的参数、HTTP 方法、标头和正文内容标记 URL 的默认域?
大致如下:
.. rest:method:: GET /api/foo
:param bar: A valid bar
:extension: json or xml
Retrieve foos for the given parameters. E.g.::
GET /api/foo.json?bar=baz
这样的东西是否已经存在,或者其中一个默认扩展可用,或者我必须自己编写一个?
答:
18赞
deceze
1/19/2011
#1
由于似乎没有任何现有的解决方案,因此我实现了一个非常简单的 HTTP 域,可用于标记 API 方法:
import re
from docutils import nodes
from sphinx import addnodes
from sphinx.locale import l_, _
from sphinx.domains import Domain, ObjType
from sphinx.directives import ObjectDescription
http_method_sig_re = re.compile(r'^(GET|POST|PUT|DELETE)?\s?(\S+)(.*)$')
class HTTPMethod(ObjectDescription):
def handle_signature(self, sig, signode):
m = http_method_sig_re.match(sig)
if m is None:
raise ValueError
verb, url, query = m.groups()
if verb is None:
verb = 'GET'
signode += addnodes.desc_addname(verb, verb)
signode += addnodes.desc_name(url, url)
if query:
params = query.strip().split()
for param in params:
signode += addnodes.desc_optional(param, param)
return url
class HTTPDomain(Domain):
"""HTTP language domain."""
name = 'http'
label = 'HTTP'
object_types = {
'method': ObjType(l_('method'), 'method')
}
directives = {
'method': HTTPMethod
}
def setup(app):
app.add_domain(HTTPDomain)
它允许我标记这样的方法,并且它们的样式在视觉上会很好:
.. http:method:: GET /api/foo/bar/:id/:slug
:param id: An id
:param slug: A slug
Retrieve list of foobars matching given id.
这是我第一次尝试 Sphinx 和 Python,所以这应该被认为是非常基本的代码。如果有人有兴趣充实这个项目,请在 Github 上分叉这个项目!
评论
1赞
Henrik P. Hessel
1/19/2011
伟大!谢谢!您应该在标题中添加术语 Restful,以获得更高的 google pagerank 关于此主题:)我可以做到,但我不喜欢搞砸好问题。
1赞
deceze
1/19/2011
@Henrik 好点子。:)我正在考虑将其扔到 Github 上,以便进行一些协作开发。你觉得怎么样?
0赞
Henrik P. Hessel
1/19/2011
如果它在 Githubs 上结束,不会伤害任何人;)
0赞
ʇsәɹoɈ
10/14/2011
我今天从 python 包索引安装了它,但它根本不起作用。引发了此异常:TypeError:__init__() 得到了一个意外的关键字参数“can_collapse”
25赞
Viktor Haag
10/3/2011
#2
Sphinx Contrib 项目似乎也有一个 HTTP 域包,用于记录 RESTful HTTP API。您可以在 Python 包站点上找到其文档。我不能说它的适用性:我才刚刚开始研究狮身人面像,我还需要记录 RESTful API,并注意到这个贡献的包。
评论
0赞
ʇsәɹoɈ
10/14/2011
+1.我今天尝试了这个扩展,发现这是一个非常好的开始。它还带有一个模块,可以扫描 Flask 应用程序的路由表以获取文档,就像 autodoc 一样。(我还没有尝试过那部分。
0赞
deceze
10/23/2012
将此标记为已接受,因为我认为这是维护得更好的软件包。我的版本现在基本上被放弃了(尽管它确实可以按原样工作)。
4赞
Viktor Haag
10/25/2012
我现在可以评论说,我们已经在生产中使用 Sphinx(带有 HTTP 域包)一年了,它做得很好。我做了一些局部的改变,以满足我们的特定需求,但总的来说,我对结果非常满意。
0赞
proteneer
2/17/2014
注意:sphinxcontrib.autohttp.tornado 仅适用于 Python 2.x,因为它导入了 StringIO。
1赞
Viktor Haag
2/19/2014
@proteneer,据我所知,这不是我所指的扩展包:我指的是.sphinxcontrib-httpdomain
评论