LINUX.ORG.RU

Вопрос по OpenAPI

 , ,


0

1

Можете сказать, соответствует ли POST-запрос схеме из спецификации?

В спецификации есть раздел:

    data.status.request:
      description: To modify file DB
      type: object
      required: [files]
      properties:
        files:
          type: array
          items:
            type: object
            required: [key, status]
            properties:
              key:
                type: string
                description: File name
              status:
                type: string
                enum: [success, error]
                description: Processing status

Посылаю JSON:

{ "files": [
  {
    "key": "1.txt",
    "status": "error"
  }
  ]
}

Получаю ошибку 400.

Можете сказать, соответствует ли такой JSON этой схеме?

Ответ: вроде, соответствует.

А причина ошибки, как выяснилось, в том, что curl --data ставит Content-type: application/x-www-form-urlencoded. Некоторым программам нужно явное -H 'Content-Type: application/json' или --json.

★★★

Последнее исправление: olegd (всего исправлений: 2)
Ответ на: комментарий от neumond

по жсонсхеме должно подойти

Спасибо. А то всю ночь колупался, и спросить некого.

что значит data.status.request

Имя схемы, на которую ссылается описание одной из точек входа.

olegd ★★★
() автор топика
Ответ на: комментарий от olegd
>>> import json
>>> import yaml
>>> import jsonschema
>>> schema = yaml.safe_load('''
... description: To modify file DB
... type: object
... required: [files]
... properties:
...     files:
...         type: array
...         items:
...             type: object
...             required: [key, status]
...             properties:
...                 key:
...                     type: string
...                     description: File name
...                 status:
...                     type: string
...                     enum: [success, error]
...                     description: Processing status
... ''')
>>> v = jsonschema.Draft202012Validator(schema)
>>> v.validate(json.loads('{ "files": [ { "key": "1.txt", "status": "error" } ] }'))
>>> # без ошибок, если заменить на error2, то свалится
neumond
()
Ответ на: комментарий от olegd

У меня 3.12, но такое же должно быть и на 3.13, если jsonschema уже его поддерживает.

Traceback (most recent call last):
    ...
    v.validate(json.loads('{ "files": [ { "key": "1.txt", "status": "error2" } ] }'))
    ...
    raise error
jsonschema.exceptions.ValidationError: 'error2' is not one of ['success', 'error']

Failed validating 'enum' in schema['properties']['files']['items']['properties']['status']:
    {'description': 'Processing status',
     'enum': ['success', 'error'],
     'type': 'string'}

On instance['files'][0]['status']:
    'error2'
neumond
()