如何使用swagger / openapi在客户端/服务器之间正确共享代码

时间:2020-05-17 06:04:19

标签: python swagger openapi openapi-generator fastapi

我试图弄清楚如何使用openapi-generator来最大程度地减少客户端和服务器之间的重复python代码。如果有关系,我将使用FastAPI作为我的Web框架以及Pydantic。

在服务器端,我有:

class Member(BaseModel):
    name: str
    def greeting(self):
        return "Hello " + name

然后我可以写:

m1 = Member("John Doe")
print(m1.greeting())

从服务器角度来看,到目前为止一切都很好。

然后在FastAPI中,我创建一个API

@app.get("/members/", response_model=List[Member])
def get_members():
    m1 = Member("Jane Doe")
    m2 = Member("John Smith")
    return [m1, m2]

使用openapi-generator生成客户端代码后,可以编写: my_members = my_api.get_members()在客户端。到目前为止,一切都很好。

现在,问题出在哪里。我想打my_members[0].greeting() 在客户端上,但这在openapi-generator生成的客户端库中不可用。它不会生成任何辅助函数,这意味着我必须想出一种更复杂的方式来在客户端和服务器之间共享数据结构和方法。

我是否会想到这种方式的代码共享?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

OpenApi仅允许您指定对象的数据,而不能指定函数。

要在客户端和服务器之间共享通用代码,可以使用通用代码创建第三个项目/模块。

然后将其用作客户端/服务器项目中的依赖项。

─ myapp
   ├── client
   │   └── __init__.py
   ├── server
   │   └── __init__.py
   └── common
       └── __init__.py