Rest Api网关和共享服务模型

Rest Api网关和共享服务模型,rest,asp.net-web-api,microservices,api-design,api-gateway,Rest,Asp.net Web Api,Microservices,Api Design,Api Gateway,我的问题的简短版本是,我试图围绕API网关和内部微服务之间如何“共享”模型来思考。我假设网关可以负责将调用转换为多个服务,并返回数据的新聚合表示。网关如何从微服务中了解可用模型 在我的简单例子中。我有: API网关 用户服务 餐饮服务 用户服务 此rest服务将公开一个/api/users端点 型号 { "id": 12345, "name": "Joe Bloggs", "e-mail": "joe@bloggs.com", "lastloggedin":

我的问题的简短版本是,我试图围绕API网关和内部微服务之间如何“共享”模型来思考。我假设网关可以负责将调用转换为多个服务,并返回数据的新聚合表示。网关如何从微服务中了解可用模型

在我的简单例子中。我有:

  • API网关
  • 用户服务
  • 餐饮服务
用户服务

此rest服务将公开一个
/api/users
端点

型号

{
    "id": 12345,
    "name": "Joe Bloggs",
    "e-mail": "joe@bloggs.com",
    "lastloggedin": "05/10/2017"
}
{
    "dishes": [
        {
            "userId": 12345,
            "isActive": true,
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        },
        {
            "userId": 12345,
            "isActive": false,
            "type": "american",
            "sub-types": [
                "burgers",
                "steaks"
            ]
        }
    ]
}
{
    "cook": "Joe Bloggs",
    "lastloggedin": "05/10/2017",
    "dishes": [
        {
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        }
    ]
}
餐厅服务

此rest服务将公开一个
/api/disks
端点

型号

{
    "id": 12345,
    "name": "Joe Bloggs",
    "e-mail": "joe@bloggs.com",
    "lastloggedin": "05/10/2017"
}
{
    "dishes": [
        {
            "userId": 12345,
            "isActive": true,
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        },
        {
            "userId": 12345,
            "isActive": false,
            "type": "american",
            "sub-types": [
                "burgers",
                "steaks"
            ]
        }
    ]
}
{
    "cook": "Joe Bloggs",
    "lastloggedin": "05/10/2017",
    "dishes": [
        {
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        }
    ]
}
API网关

API网关允许有人调用
/API/user/12345/disks
/API/disks
,并为厨师返回菜肴。以及一些基本的用户详细信息

型号

{
    "id": 12345,
    "name": "Joe Bloggs",
    "e-mail": "joe@bloggs.com",
    "lastloggedin": "05/10/2017"
}
{
    "dishes": [
        {
            "userId": 12345,
            "isActive": true,
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        },
        {
            "userId": 12345,
            "isActive": false,
            "type": "american",
            "sub-types": [
                "burgers",
                "steaks"
            ]
        }
    ]
}
{
    "cook": "Joe Bloggs",
    "lastloggedin": "05/10/2017",
    "dishes": [
        {
            "type": "italian",
            "sub-types": [
                "pizza",
                "pasta"
            ]
        }
    ]
}

在这一点上。我已经确定了3个模型(即C类)。2来自内部服务,1来自API网关返回的数据的新表示。我不确定API网关如何知道用户和餐厅服务模型,而不将这些模型直接耦合到API网关。基本上在网关和微服务之间共享代码,我认为这是不可取的。

我认为您的问题更多地围绕API链接的概念。客户端api 1 api 2 api 3。这是可以接受的,但当然存在模式被破坏的风险,所以要小心