Python 2.7 从第三方API JSON响应定义云端点响应消息
我正在尝试用Python中的AppEngine上托管的Google Cloud Endpoints v2创建一个自定义API。自定义API是与外部API交互的API。例如,定制API将有一个GET方法,调用该方法时会向第三方API发出GET请求 该用例旨在使第三方API更易于在公司内使用,并添加额外的检查以验证对返回数据的访问 有没有一种简单的方法可以从我的自定义API中从第三方API返回已格式化的API响应? 当我说easy时,我的意思是不必将JSON响应转换为端点消息。第三方API将返回如下内容:Python 2.7 从第三方API JSON响应定义云端点响应消息,python-2.7,google-app-engine-python,google-cloud-endpoints-v2,Python 2.7,Google App Engine Python,Google Cloud Endpoints V2,我正在尝试用Python中的AppEngine上托管的Google Cloud Endpoints v2创建一个自定义API。自定义API是与外部API交互的API。例如,定制API将有一个GET方法,调用该方法时会向第三方API发出GET请求 该用例旨在使第三方API更易于在公司内使用,并添加额外的检查以验证对返回数据的访问 有没有一种简单的方法可以从我的自定义API中从第三方API返回已格式化的API响应? 当我说easy时,我的意思是不必将JSON响应转换为端点消息。第三方API将返回如下
{
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)
仅供参考,这是JSON的简化版本。我的实际转换代码更长更复杂
我是否忽略了端点库或Python中可以为我进行此转换的内容
我最大的担心是,转换来自第三方API响应的响应的时间将导致自定义API响应时间大于等待API响应时的典型30秒超时。不幸的是,Endpoints框架仅适用于消息实例。由于历史原因,如果不重新构建框架,这是不可能改变的。不幸的是,Endpoints框架只与消息实例一起工作。由于历史原因,如果不对框架进行重大重组,这是不可能改变的
#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
)