raml-org / raml-spec

RAML Specification
http://raml.org
3.87k stars 857 forks source link

Clarification on 'type' facet usage #762

Open deiteris opened 3 years ago

deiteris commented 3 years ago

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?

sammy-hughes commented 2 years ago

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.