Как resourceType может наследоваться от нескольких типов?
Цель: создать resourceTypes для конечных точек CRUD без повторения.
(работа с RAML 1.0 в Anypoint Studio и Mulesoft Design Center)
Давайте запустим пару resourceTypes для конечных точек одиночного действия:
resourceTypes:
getItem:
get:
responses:
200:
body:
application/json
postItem:
post:
responses:
201:
body: null
deleteItem:
delete:
responses:
200:
body: null
Все идет нормально.
Теперь я хочу создать resourceType для конечной точки, которая разрешает запросы GET и DELETE. Это действительно:
getDeleteItem:
type: getItem
delete:
responses:
200:
body: null
... но мне пришлось повторить код из deleteItem, который мне не нравится.
Эти подходы не работают:
# the syntax for a union of types, does not work for resourceTypes
getDeleteItem:
type: getItem | deleteItem
# no error here, but everything after the first type reference is ignored
getDeleteItem:
type: { getItem, deleteItem }
Есть ли способ лучше?
Я нашел уродливый обходной путь ("базовые" resourceTypes, каждый из которых имеет свой тип, установленный в переменную, чтобы их можно было связать вместе), но это, кажется, вызывает противоречивые ошибки и сбои в Mulesoft Design Center.
0 ответов
В конце концов я нашел четкий ответ на этот вопрос: используйте необязательные методы (глаголы).
Вместо исходных трех типов ресурсов создайте один со всеми тремя глаголами. Отметьте каждый глагол как требуется: false или добавьте вопросительный знак к имени глагола.
resourceTypes:
myResourceType:
get?:
responses:
200:
body:
application/json
post?:
responses:
201:
body: null
delete?:
responses:
200:
body: null
Используйте resourceType в вашей конечной точке как обычно и добавьте строку под конечной точкой для каждого глагола, который вы хотите использовать.
В этом примере создается конечная точка myResource, которая принимает запросы GET и POST, но не принимает запросы DELETE.
/myResource:
type:
myResourceType
get:
post:
GET и POST наследуют все, что мы определили в resourceType. Мы можем переопределить или добавить каждый глагол в конечной точке.
Вы также можете создать дополнительные типы ресурсов с этим типом в качестве корневого, но я обнаружил проблемы при попытке использовать переменные с унаследованными типами ресурсов, а дополнительные методы кажутся достаточно гибкими для достижения моих целей.