Добавление недоступных конечных точек с помощью спецификации Swagger
В качестве примера рассмотрим следующие определения EntityType в спецификации OData:
<EntityType Name="Document">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.String"/>
<Property Name="Name" Type="Edm.String"/>
<Property Name="Number" Type="Edm.String"/>
<Property Name="Description" Type="Edm.String"/>
<Property Name="Title" Type="Edm.String"/>
<Property Name="Identity" Type="Edm.String">
.
.
.
<NavigationProperty Name="PrimaryContent" Type="PTC.DocMgmt.ContentItem"/>
</EntityType>
<EntityType Name="ContentItem" HasStream="true">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.String"/>
<Property Name="Comments" Type="Edm.String"/>
<Property Name="Description" Type="Edm.String"/>
.
.
.
</EntityType>
Конечная точка, позволяющая добавить
PrimaryContent в данный
Document, не включена в список конечных точек, генерируемый модулем ODataConnector при анализе спецификации OData. Вообще любые конечные точки, поддерживаемые внутренней серверной системой для определений
NavigationProperty, соответствующих
EntityType, не включаются в список, генерируемый соединителем. Поэтому следует создать спецификацию Swagger, определяющую эти конечные точки, и добавить эту спецификацию в формате JSON как значение свойства
SwaggerJSON. Дополнительные сведения см. в разделе
Использование ODataConnector или SAPODataConnector.
Для приведенного выше примера из спецификации OData можно узнать следующее.
• Путь к конечной точке будет иметь следующий формат: /Documents('{ID}')/PrimaryContent, где
◦ Documents - наименование entitySet, где будут содержаться сущности Document.
◦ ID - это Key для Document, используется для однозначной идентификации экземпляра Document. Скобки {} вокруг ID означают, что это местозаполнитель для обязательного параметра пути, который должен быть указан при создании запроса, когда местозаполнитель будет заменен фактическим значением.
◦ PrimaryContent - это NavigationProperty для Document.
• PUT - это операция HTTP, поддерживающая выгрузку PrimaryContent для Document, поскольку PrimaryContent имеет тип ContentItem. Для ContentItem свойство HasStream имеет значение True.
• Файл, который должен быть выгружен как PrimaryContent для Document, является обязательным входным параметром, а параметр ContentType запроса должен иметь значение multipart/form-data для успешного выполнения запроса.
• Отклик на выполнение операции в конечной точке может быть одним из следующих:
◦ объект JSON, схема которого в точности соответствует определению ContentItem;
◦ сообщение об ошибке, означающее недопустимый запрос.
Прежде чем создавать определение в спецификации Swagger для конечной точки, необходимо удовлетворить все требования к выполнению запроса для этой конечной точки с помощью приложения, такого как расширение Postman для Google Chrome.
После проверки выполнения требований с помощью приложения Postman используйте для создания определения конечной точки такой инструмент, как
Редактор Swagger.
1. Запустите редактор с пустым объектом paths.
2. Добавьте путь для конечной точки и операцию HTTP, которую поддерживает данный путь. Для приведенного выше примера это, соответственно, "/Documents('{ID}')/PrimaryContent" и put.
3. Добавьте определения входных параметров для ID (параметр path) и File (параметр formData).
4. Добавьте для конечной точки следующую логику: consumes: [ multipart/form-data ], и produces: [ application/json ].
5. Добавьте отклики, определяемые кодами статуса HTTP, которые будет генерировать конечная точка.
Например:
◦ Успешная операция (код статуса HTTP: 200) будет возвращать объект JSON, схема которого соответствует определению ContentItem. Ссылка на определение ContentItem указывается с помощью свойства $ref.
◦ Ошибочный запрос (код статуса HTTP: 405).
6. Добавьте определение ContentItem. Сведения, необходимые для понимания схемы, см. в определении entityType для ContentItem в спецификации OData.
7. Укажите operationId и summary для операции PUT.
8. После разрешения обнаруженных ошибок в редакторе и добавления необходимых путей, операций и определений экспортируйте спецификацию Swagger как файл JSON.
9. Скопируйте содержимое экспортируемого файла JSON и задайте его как значение свойства SwaggerJSON.