С микросервисной архитектурой происходит множество сервисных коммуникаций. Ответ от межсервисного вызова должен быть проверен, чтобы подтвердить, отвечает ли объект ответа контракту, установленному посредством открытой спецификации API (Swagger). Объект запроса к REST API проверяется контроллером, но объект ответа не проверяется перед отправкой. Должно ли это быть подтверждено?
Клиент должен проверить, когда он получает и до начала обработки. Намерение здесь состоит в том, чтобы избежать нулевой проверки необходимых атрибутов.
Пример:
User:
type: "object"
required:
- email
- phone
properties:
id:
type: "integer"
format: "int64"
username:
type: "string"
firstName:
type: "string"
lastName:
type: "string"
email:
type: "string"
phone:
type: "string"
/user:
post:
tags:
- "user"
summary: "Create user"
description: "This can only be done by the logged in user."
operationId: "createUser"
produces:
- "application/xml"
- "application/json"
parameters:
- in: "body"
name: "body"
description: "Created user object"
required: true
schema:
$ref: "#/definitions/User"
responses:
default:
description: "successful operation"
/user/{username}:
get:
tags:
- "user"
summary: "Get user by user name"
description: ""
operationId: "getUserByName"
produces:
- "application/xml"
- "application/json"
parameters:
- name: "username"
in: "path"
description: "The name that needs to be fetched. Use user1 for testing. "
required: true
type: "string"
responses:
200:
description: "successful operation"
schema:
$ref: "#/definitions/User"
400:
description: "Invalid username supplied"
404:
description: "User not found"
В приведенном выше примере вызов создания пользователя завершится ошибкой, если пользовательский объект без электронной почты и телефона будет отправлен на POST.
Но / user / {username} может вернуть пользователя с пустым адресом электронной почты и телефоном, поскольку нет подтверждения для ответа.
Было бы лучше проверить ответ перед его отправкой с сервера или передать ответственность за проверку клиенту.