openstack 项目的源码写得越来越好,大家阅读源码是可以学到很多理念的,例如rest api的编写框架,我有相关博客论述rest api的新建,这里我们来欣赏一下关于rest api的请求的检查,
1,对于一个rest api来说,不应该限制太多,例如规定它要穿什么样的json,因为限制太多,意味我们要新增的时候,麻烦太多,互联网变化太快,需求变得快,就会很难及时修改,但是又要个机制可以检查请求体等参数
2,引入了装饰器写在想要检查的方法头,再新增一个相应的逻辑
viz。
由上述的装饰器来形成这样的检查逻辑
validation.schema 是validation包的schema方法,是对开源jsonschema封装,通过定义一个schema(检查格式)对一个json进行检查,具体用法是
定义一组python字典
用来描述属性要求满足的格式,其中
'oneOf': [{'type': 'string', 'format': 'uuid'},
{'type': 'null'}] 就是满足其中一个条件,
allOF 是满足所有
validation.schema 通过jsonschema 扩展了一个api请求的版本号的附加检查,来倚靠jsonschema对一个json字符串进行检查。
1,对于一个rest api来说,不应该限制太多,例如规定它要穿什么样的json,因为限制太多,意味我们要新增的时候,麻烦太多,互联网变化太快,需求变得快,就会很难及时修改,但是又要个机制可以检查请求体等参数
2,引入了装饰器写在想要检查的方法头,再新增一个相应的逻辑
viz。
@validation.schema(schema_server_create_v232, '2.32', '2.36')
@validation.schema(schema_server_create_v237, '2.37')
def create(self, req, body):
"""Creates a new server for a given user."""
context = req.environ['nova.context']
由上述的装饰器来形成这样的检查逻辑
validation.schema 是validation包的schema方法,是对开源jsonschema封装,通过定义一个schema(检查格式)对一个json进行检查,具体用法是
base_create = {
'type': 'object',
'properties': {
'server': {
'type': 'object',
'properties': {
'name': parameter_types.name,
# NOTE(gmann): In case of boot from volume, imageRef was
# allowed as the empty string also So keeping the same
# behavior and allow empty string in case of boot from
# volume only. Python code make sure empty string is
# not alowed for other cases.
'imageRef': parameter_types.image_id_or_empty_string,
'flavorRef': parameter_types.flavor_ref,
'adminPass': parameter_types.admin_password,
'metadata': parameter_types.metadata,
}}
定义一组python字典
用来描述属性要求满足的格式,其中
'oneOf': [{'type': 'string', 'format': 'uuid'},
{'type': 'null'}] 就是满足其中一个条件,
allOF 是满足所有
validation.schema 通过jsonschema 扩展了一个api请求的版本号的附加检查,来倚靠jsonschema对一个json字符串进行检查。