为您的http api开发一个客户机并记录它的特性和特性
cosmicra的Python项目详细描述
cosmicray是一个简单而高级的http客户端api开发框架。它为 定义enpoints,处理请求响应并自动将结果转换为模型。
动机:
- 易用性
- 每个级别的可配置性和定制性
- 名称空间不同的后端(一个客户端控制所有后端)
- 将路由定义/响应处理与模型或“业务逻辑”分开
- 在发出请求之前验证请求的能力
- 根据需要验证每个请求
- 将路线与模型关联的能力
警告
宇宙射线正在研制中
安装
$ pip install cosmicray
快速启动
创建应用程序
>>>fromcosmicrayimportCosmicray>>>api=Cosmicray('myapp',domain='http://mydomain.com')
定义路由和响应处理程序
使用我们创建的应用程序,我们现在可以为它添加路由并为每个路由定义一个响应处理程序。响应处理程序只是一个常规函数,它接受请求类型的单个参数。response并返回已处理的结果。
>>>@api.route('/v1/dogs/{id}',['GET','POST','PUT','DELETE'])>>>defdogs(response):...returnresponse.json()
- decoratorapi.route创建名为dogs的cosmicray.route的实例 并将给定函数作为响应处理程序在内部存储。
- cosmicray.route的实例可以调用并接受参数:
- model\u cls:可选:实现make(cls,response)的类。
- **kwargs:关键字参数。
- urlargs:url格式参数的映射
- 标题:标题映射
- 参数:查询参数的映射
- 数据,json,文件:请求正文
- 验证器:验证器回调
- &rest:请求关键字参数
- 当调用cosmicray.route的实例时,它返回一个请求对象,这样您就可以:
- 使用为每个http方法定义的函数(例如:get(),post(),put(),delete())
- 用setter重写传入的任何参数(例如:params,headers,等等)。
- 根据路由上定义的参数自动验证给定参数
- 如果应用程序配置了身份验证器,则对请求进行身份验证
- 响应处理程序处理响应后,如果提供了模型类,则结果将自动映射到模型类
如何提出请求
>>>dogs().get()>>>dogs(urlargs={id:12345}).get()>>>dogs(json={'name':'Manu'}).post()>>>dogs(urlargs={'id':12345},json={'age':4}).put()>>>dogs(urlargs={'id':12345}).delete()
指定请求参数
>>>dogs(params={'breed':'husky'},...headers={'Content-Type':'application/json'}).get()
认证请求
通常需要对访问私有资源的请求进行身份验证,而cosmicray有一个内置的机制来执行此步骤。
>>>defauthenticator(request):...ifnotrequest.is_request_for(login):...auth=login(json={'username':'me','password':'mysecret'}).post()...returnrequest.set_headers({'X-AUTH-TOKEN':auth['token']})...returnrequest...>>>@api.route('/oauth',['POST'])...deflogin(response):..."""Get an auth token for the given credentials"""...returnresponse.json()...>>>@api.route('/private/resource',['GET'])...defprivate_resource(response):..."""Must be authenticated to access this"""...returnresponse.json()...>>>api.configure(authenticator=authenticator)>>># Now the private resourse will be automatically updated to include auth headers>>>private_resource.get()
型号
基础知识
- 具有内置模型类的宇宙飞船
- 这个基类绑定到一个特定的路由处理程序,并定义将映射到响应的所有字段,或者作为post和put请求的有效负载的一部分。
- 它自动将其定义的字段用作url参数和请求正文
- 提供进行http调用的功能(例如:get,create,update,delete)
- 可以覆盖默认行为,例如创建/更新paylods
>>>fromcosmicray.modelimportModel>>>classDog(Model):...__route__=dogs...__slots__=[...'id',...'name',...'breed',...'age'...]>>>manu=Dog(name='Manu',age=4).create()>>>manu.breed='Husky'>>>manu.update()>>>manu.delete()>>>manu=Dog(id=12345).get()>>>alldogs=Dog().get()
与其他车型/路线的关系
>>>fromcosmicray.modelimportrelationhip,Model,ModelParam>>>classCat(cosmicray.model.Model):...__route__=cats...__slots__=[...'id',...'name',...'age'...]...friends=relationhip('Friend',urlargs={'id':ModelParam('id')})
如果不想使用cosmicray.model作为基础,可以定义自己的 甚至使用just usecollections.namedtuple作为模型。
>>>classMyModel(object):...@classmethod...def_make(cls,response):...obj=cls()......dostuffwiththeresponse...returnobj