Определить ответное сообщение облачных конечных точек из ответа JSON стороннего API

Я пытаюсь создать собственный API с конечными точками Google Cloud v2, размещенными в App Engine на Python. Пользовательский API — это API, который взаимодействует с внешним API. Например, пользовательский API будет иметь метод GET, который при вызове отправляет запрос GET к стороннему API.

Вариант использования — упростить использование стороннего API внутри компании и добавить дополнительные проверки для подтверждения доступа к возвращаемым данным.

Есть ли простой способ вернуть уже отформатированный ответ API от стороннего API из моего пользовательского API? Когда я говорю "просто", я имею в виду отсутствие необходимости преобразовывать ответ 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)

...

#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, что сделает это преобразование для меня?

Я больше всего опасаюсь, что время преобразования ответа из ответа стороннего API приведет к тому, что время ответа пользовательского API будет больше, чем обычное 30-секундное время ожидания ответа API.


person JMKrimm    schedule 19.12.2018    source источник


Ответы (1)


К сожалению, инфраструктура конечных точек работает исключительно с экземплярами сообщений. По историческим причинам это невозможно изменить без серьезной перестройки фреймворка.

person Rose Davidson    schedule 19.12.2018