raml-spec
raml-spec copied to clipboard
Clarification on 'type' facet usage
Hi 👋
When working with AMF parser, I've discovered that the following RAML passes the validation (https://github.com/aml-org/amf/issues/1085):
#%RAML 1.0
title: Test API
/person:
post:
body:
application/json:
type:
type:
type: # And possibly many more nested 'type:' facets below until the actual Type Expression
type: object
properties:
prop1: string
Here's what the current version of specification says:
The type which the current type extends or just wraps. The value of a type node MUST be either a) the name of a user-defined type or b) the name of a built-in RAML data type (object, array, or one of the scalar types) or c) an inline type declaration.
While points a) and b) are clear, the point c) here puzzles me since it creates a loophole that allows a user to create an infinite type declaration, or confusing constructions involving deprecated schema
node:
types:
MyType:
schema:
type: object
properties:
Is it done on purpose? What is the point of allowing an inline type declaration inside a type?
given example A
types:
foo:
type: object
properties:
bar: string
if the following, example B
...
baz:
type: foo
is the same as, example C
...
baz:
type: !insert-the-definition-of-what-folllows foo
then example C would expand to the following, example D.
...
baz:
type:
type: object
properties:
bar: string
which is, like you observed, a construction that passes validation. It seems to me only an issue to a non-conformant, naive RAML processor.