如何自动构建REST API的客户端界面?

时间:2016-11-29 16:49:44

标签: python rest python-3.5

假设存在RESTful接口,它具有以下集合,它们之间的关系表示为邻接列表形式的图形(例如,这可能是json-schema,swagger等)。

{
    'countries': {('persons', 'citizens',), ('regions', 'regions')},
    'person': {('country', 'citizenship'), ('companies', 'works_at')},
    'company': {('persons', 'employes'), ('departments', 'departments'), ('offices', 'offices')},
    'department': {('persons', 'employes')},
    'office': {('person', 'employes')}
}

``` 关键是集合的名称,值是一组关系。关系是一对(collection, relationship name)

我考虑过自动化构建客户端界面的任务,并为此制作好的客户端api。 我能想到的最简单的解决方案是(在python 3.6中可以使用kwargs进行排序)

def build_url(**path):
    # ommiting lots of details, but the basic idea is this
    if is_path_exists(path):
        return '/'.join(map(str, chain.from_iterable(path.items())))

我想了一段时间来解决这个问题在python中3.5 kwargs没有排序而且找不到,所以这可能是错误的方法,但在python 3.6中客户端代码甚至可以这么简单就这样。

get(build_url(country='some_country', person='john', company=None)) 这将使约翰的所有公司从一些国家的作品中回归。

这个解决方案还有一个缺陷。它不向用户提供有关api中存在哪些实体的任何信息。

那么,你将如何实现这一目标?也许已有图书馆了吗?

EDIT1。是的,我知道招摇。我刚刚了解到它有一些代码生成功能,但这不是我想要的。我不想生成代码,我想使用元编程动态创建它。虽然我知道java,但用java生成python代码是一个坏主意,因为不是每个python程序员都可以改变这个生成器。

0 个答案:

没有答案