定义来自第三方 API JSON 响应的 Cloud Endpoints 响应消息
Define Cloud Endpoints Response Message from a 3rd party API JSON response
我正在尝试使用 Google Cloud Endpoints v2 在 Python 中托管在 App Engine 上创建自定义 API。自定义 API 是一个与外部 API 交互的 API。例如,自定义 API 将有一个 GET 方法,该方法在被调用时向第三方 API 发出 GET 请求。
用例是为了让第 3 方 API 在公司内更容易使用,并添加额外的检查以验证对 returned 数据的访问。
有没有一种简单的方法可以从我的自定义 API return 来自第 3 方 API 的已经格式化的 API 响应?
当我说简单时,我的意思是不必将 JSON 响应转换为端点消息。第 3 方 API 将 return 类似:
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
keyFour: [
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
},
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
},
]
}
我尽量不将 JSON 转换为端点消息。
class GetResponse(messages.Message):
keyOne = messages.StringField(1)
keyTwo = messages.StringField(2, required=True)
keyThree = messages.MessageField(SomeStringList, 3)
keyFour = messages.MessageField(SomeJsonList, 4)
class SomeStringList(messages.Message):
keyFive = messages.StringField(1, repeated=True)
class SomeJsonList(messages.Message):
keySix = messages.MessageField(GetResponse, 1, repeated=True)
...
#Convert JSON
converted_json_list = []
for obj in resObj["keyFour"]:
converted_json_list.append(GetResponse(
keyOne=obj["keyOne"],
keyTwo=obj["keyTwo"],
keyThree=obj["keyThree"]
))
return GetResponse(
keyOne=resObj["keyOne"],
keyTwo=resObj["keyTwo"],
keyThree=resObj["keyThree"]
keyFour=converted_json_list
)
仅供参考,这是 JSON 的简化版本。我的实际转换代码更长更复杂。
我是否忽略了端点库或 Python 中可以为我进行此转换的内容?
我最担心的是,转换来自第 3 方 API 响应的响应时间会导致自定义 API 响应时间大于典型的 30 秒超时等待时间API 响应。
不幸的是,Endpoints 框架只适用于消息实例。由于历史原因,如果不对框架进行重大重新设计,这是不可能改变的。
我正在尝试使用 Google Cloud Endpoints v2 在 Python 中托管在 App Engine 上创建自定义 API。自定义 API 是一个与外部 API 交互的 API。例如,自定义 API 将有一个 GET 方法,该方法在被调用时向第三方 API 发出 GET 请求。
用例是为了让第 3 方 API 在公司内更容易使用,并添加额外的检查以验证对 returned 数据的访问。
有没有一种简单的方法可以从我的自定义 API return 来自第 3 方 API 的已经格式化的 API 响应? 当我说简单时,我的意思是不必将 JSON 响应转换为端点消息。第 3 方 API 将 return 类似:
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
keyFour: [
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
},
{
keyOne: "key one value",
keyTwo: "key two value",
keyThree: ["key three value array", "another string", "and another string"],
},
]
}
我尽量不将 JSON 转换为端点消息。
class GetResponse(messages.Message):
keyOne = messages.StringField(1)
keyTwo = messages.StringField(2, required=True)
keyThree = messages.MessageField(SomeStringList, 3)
keyFour = messages.MessageField(SomeJsonList, 4)
class SomeStringList(messages.Message):
keyFive = messages.StringField(1, repeated=True)
class SomeJsonList(messages.Message):
keySix = messages.MessageField(GetResponse, 1, repeated=True)
...
#Convert JSON
converted_json_list = []
for obj in resObj["keyFour"]:
converted_json_list.append(GetResponse(
keyOne=obj["keyOne"],
keyTwo=obj["keyTwo"],
keyThree=obj["keyThree"]
))
return GetResponse(
keyOne=resObj["keyOne"],
keyTwo=resObj["keyTwo"],
keyThree=resObj["keyThree"]
keyFour=converted_json_list
)
仅供参考,这是 JSON 的简化版本。我的实际转换代码更长更复杂。
我是否忽略了端点库或 Python 中可以为我进行此转换的内容?
我最担心的是,转换来自第 3 方 API 响应的响应时间会导致自定义 API 响应时间大于典型的 30 秒超时等待时间API 响应。
不幸的是,Endpoints 框架只适用于消息实例。由于历史原因,如果不对框架进行重大重新设计,这是不可能改变的。