Так, по данным официальной выборки документации, ответы от OneNote может иметь следующую структуру:Есть ли способ использовать универсальный базовый отклик, содержащий поля значений, ошибок и предупреждений?
{
value:{the content we requested},
error:{error if exists with warnings inside if exist},
@api.diagnostics:{warnings if exist}
}
Но, если тело ответа содержит не массив JSON, но JSON объект, то ответ будет следующим
{
Here would be entity, representing the content we requested
}
Итак, мой вопрос следующий: есть ли способ унифицировать ответы от OneNote API, поскольку существующая структура ответа нарушает его контракт.
Как я могу изменить свой модуль запроса с помощью перехватчиков, чтобы результат выглядел так, как будто мне нужно, это кажется грязным обходным решением, поэтому я хотел бы получить официальную информацию по этой проблеме.
Спасибо за ответ, но что вы сказали, что я сказал, что я знаю. Вопрос заключался в следующем: как отделять ошибки и предупреждения от данных ответа (фактические данные, которые мы хотели получить). На данный момент я использую Google Gson для настройки процесса десериализации как низкоуровневого перехватчика в моей модели анализа ответов. Итак, там, я выполняю перемещение дополнительных полей внутри корневого json, кроме «error» и «@api.«Диагностика», если «значение» не существует для нового элемента в корне, называемом «значение», поэтому ответ от api не отличается в зависимости от типа данных ответа. Но это действительно грязное обходное решение –
Будучи более конкретным: объект никогда не должен содержать ошибку , поскольку ошибка никогда не должна содержать объект. Это архитектурная ошибка. Как будто мы говорим в терминах чистой архитектуры - уровень сущности должен содержать универсальный формат ответа, который ВКЛЮЧАЕТ как данные ответа свойств, описание ошибки, если существует, и другие специальные поля, это будет общим для КАЖДОГО ответа. В противном случае существует вероятность недоразумения, когда объект будет содержать какое-либо поле с именем, равным общей ошибке части ответа (например, объект, содержащий опору «ошибка» и общий ответ, содержащий опору «ошибка») –
Обновлен мой ответ. Ошибки будут возвращаться только в коды состояния 4xx и 5xx, объекты будут возвращаться только в кодах состояния 2xx. –