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

Python 如何使用swagger/openapi在客户机/服务器之间正确共享代码,python,swagger,openapi,openapi-generator,fastapi,Python,Swagger,Openapi,Openapi Generator,Fastapi,我试图弄清楚如何使用openapi生成器来最小化客户端和服务器之间重复的python代码。如果有必要的话,我将使用FastAPI和Pydantic作为我的web框架 在服务器端,我有: class Member(BaseModel): name: str def greeting(self): return "Hello " + name 然后我可以写: m1 = Member("John Doe") print(m1.greeting()) 到目前为止,从服

我试图弄清楚如何使用openapi生成器来最小化客户端和服务器之间重复的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生成器
生成客户端代码后,我可以编写:
my\u members=my\u api.get\u members()
在客户端。到目前为止,一切都很顺利

然而,现在是问题的症结所在。我想打电话给我的会员[0]。问候语() 在客户端上,但这在生成的客户端库中不可用。它不生成任何助手函数,这意味着我必须想出一种更复杂的方法,在客户端和服务器之间共享数据结构和方法


我这样认为代码共享是错误的吗?有更好的方法吗?

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

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

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

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

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

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

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

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

您是否找到任何文档,告诉您可以通过
openapi生成器
共享特定的代码实现。如果您有特定于平台的依赖代码或特定于语言的库(例如Python中的numpy),您希望发生什么。我认为这是不可能的。虽然我是openapi生成器的新手,但我还没有找到任何与此相关的文档。对于为与服务器语言相同的语言(在我的例子中是Python)生成的客户机存根,最好将助手函数传递给为客户机生成的代码。或者,如果这不起作用,也许有人可以推荐一种更好的方法来组织我的代码,这样我就可以在客户端和服务器上生成相同的helper函数。这似乎是一个常见的问题。您是否找到任何文档,告诉您可以通过
openapi generator
共享特定的代码实现。如果您有特定于平台的依赖代码或特定于语言的库(例如Python中的numpy),您希望发生什么。我认为这是不可能的。虽然我是openapi生成器的新手,但我还没有找到任何与此相关的文档。对于为与服务器语言相同的语言(在我的例子中是Python)生成的客户机存根,最好将助手函数传递给为客户机生成的代码。或者,如果这不起作用,也许有人可以推荐一种更好的方法来组织我的代码,这样我就可以在客户端和服务器上生成相同的helper函数。这似乎是一个常见的问题。