为您的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重写传入的任何参数(例如:paramsheaders,等等)。
    • 根据路由上定义的参数自动验证给定参数
    • 如果应用程序配置了身份验证器,则对请求进行身份验证
    • 响应处理程序处理响应后,如果提供了模型类,则结果将自动映射到模型类

如何提出请求

>>>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()

型号

基础知识

  • 具有内置模型类的宇宙飞船
  • 这个基类绑定到一个特定的路由处理程序,并定义将映射到响应的所有字段,或者作为postput请求的有效负载的一部分。
  • 它自动将其定义的字段用作url参数和请求正文
  • 提供进行http调用的功能(例如:getcreateupdatedelete
  • 可以覆盖默认行为,例如创建/更新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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
两个日期之间的datetime Java HashMap筛选器   java会选择以下选项吗:django+smartGWT似乎是一个不错的选择?   java如何在jsp中显示Json对象   从Java代码调用装入点文件路径   接口中的java JPA Hibernate更新查询   java在从jsp调用时从类获取根目录   java JFileChooser在JTextField中显示多个选定文件   在Springbean基类中定义的方法中使用@Retryable的java不会被重试   java StackOverflower错误和等于疯狂数字的值   swing使Java打印的页边距更小   java使用Matisse GUI builder设置最大宽度   带MySQL的java注册表单JavaFX在intellij中失败   java监听音量按钮事件安卓   java正在寻找一个新的应用程序。NET 3.5/J2EE体系结构概念比较文章/图表   java如何使用SpringJDBC检索记录   java MULE ESB:带有regex()函数的表达式过滤器   java JFrame按钮逻辑错误   java Android SQLite在Date1和Date2之间选择   java求解丢番图方程