使用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
这样的东西是否已经存在,或者是可用的默认扩展名之一,还是我必须自己写一个?
答案 0 :(得分:25)
Sphinx Contrib项目似乎还有一个 HTTP Domain 包,用于记录RESTful HTTP API。您可以在Python packages网站上找到其文档。我不能说它的适应性:我只是刚开始研究Sphinx,我也需要记录RESTful API,并注意到这个贡献包。
答案 1 :(得分:18)
由于似乎没有任何现有的解决方案,我已经实现了一个非常简单的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,所以这应该被认为是非常基本的代码。如果有人有兴趣充实,请fork this project on Github!