首页 > 解决方案 > 如何使用 swagger/openapi 在客户端/服务器之间正确共享代码

问题描述

我试图弄清楚如何使用 openapi-generator 来最小化客户端和服务器之间重复的 python 代码。如果重要的话,我将 FastAPI 与 Pydantic 一起用作我的 Web 框架。

在服务器端,我有:

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生成的客户端库中不可用。它不会生成任何辅助函数,这意味着我必须想出一种更复杂的方式来在客户端和服务器之间共享数据结构和方法。

以这种方式共享代码我错了吗?有更好的方法吗?

标签: pythonswaggeropenapiopenapi-generatorfastapi

解决方案


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

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

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

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

推荐阅读