Мы следуем первому подходу к разработке API.
Один из сценариев, где мы хотим использовать Наследование Я не могу определить спецификацию для него.
Это тип C # для него
public class PublishRequest
{
[JsonProperty("notificationType")]
public string NotificationType { get; set; }
[JsonProperty("source")]
public string Source { get; set; }
[JsonProperty("timestamp")]
public string Timestamp { get; set; }
[JsonProperty("payload")]
public List<BaseObject> Payload { get; set; }
}
ЭтоУ класса есть свойство для BaseObject
public class BaseObject
{
[JsonProperty("Id")]
public string Id { get; set; }
}
Все последующие типы наследуются от этого типа, который выглядит следующим образом:
public class Accounts:BaseObject
{
[JsonProperty("phone")]
public string Phone { get; set; }
[JsonProperty("accountid")]
public string AccountID { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("legalname")]
public string LegalName { get; set; }
[JsonProperty("website")]
public string Website { get; set; }
[JsonProperty("linkedin")]
public string LinkedIn { get; set; }
[JsonProperty("twitter")]
public string Twitter { get; set; }
}
Спецификация, в которой используются эти классы, такова:
/notification/publish:
post:
summary: publish notification
tags:
- Notification
requestBody:
description: publish request body
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PublishRequest'
responses:
"200":
description: success message
Проблема, с которой я сталкиваюсь, заключается в определении схемы для нее.
Схема выглядит следующим образом
PublishRequest:
required:
- notificationType
properties:
notificationType:
type: string
enum: [account_created, account_updated]
source:
type: string
enum: [A, B]
timestamp:
type: string
format: date-time
payload:
$ref: "#/components/schemas/NotificationPayload"
NotificationPayload:
type: array
items:
oneOf:
- $ref: "#/components/schemas/Account"
BaseObject:
properties:
Id:
type: string
Account:
allOf:
$ref: '#/components/schemas/BaseObject'
type: object
properties:
phone:
type: string
accountId:
type: string
name:
type: string
legalname:
type: string
website:
type: string
linkedin:
type: string
twitter:
type: string
facebook:
type: string
defaultcurrency:
type: string
Я продолжаю получать эту ошибку в редакторе сваггеров
Structural error at components.schemas.Account.allOf
should be array