Мы разработали API с использованием Eve 0.7, который использовал allow_unknown
для вложенного поля dict .Это поле работало, как и ожидалось, в соответствии с документацией cerberus.
Мы обновляемся до Eve 0.8, и наши конечные точки больше не учитывают параметр allow_unknown
во вложенных диктовках.
Пример
settings.py
DOMAIN = {
'endpoint': {
'schema': {
'data': {
'type': 'dict',
'allow_unknown': True,
'schema': {
'prop': {'type': 'string'}
}
}
}
}
}
RESOURCE_METHODS = ['GET', 'POST', 'DELETE']
ITEM_METHODS = ['GET', 'PATCH', 'PUT', 'DELETE']
app.py
from eve import Eve
app = Eve()
app.run(debug=True)
Test
- Запуститеприложение, запустив:
$ python app.py
- Проверьте конечную точку с помощью curl:
Pass
$ curl -d '{"data": {"prop": "test prop"}}' -H 'Content-Type: application/json' http://127.0.0.1:5000/endpoint
{"_updated": "Fri, 08 Jun 2018 19:43:11 GMT", "_created": "Fri, 08 Jun 2018 19:43:11 GMT", "_etag": "e04dd19a6e13c74ccdb5561722bb001b0f5dff28", "_id": "5b1adc4f198a2527650320a4", "_links": {"self": {"title": "Endpoint", "href": "endpoint/5b1adc4f198a2527650320a4"}}, "_status": "OK"}
Fail (ожидал, что это пройдет)
$ curl -d '{"data": {"prop": "test prop", "test": 2}}' -H 'Content-Type: application/json' http://127.0.0.1:5000/endpoint
{"_status": "ERR", "_issues": {"data": {"test": "unknown field"}}, "_error": {"code": 422, "message": "Insertion failure: 1 document(s) contain(s) error(s)"}}