` decorest'library提供了一个易于使用的声明性rest api客户机接口,在这个接口中,使用decorators定义的api方法会自动给出一个工作的rest客户机,而不需要额外的代码。
decorest的Python项目详细描述
decorest - decorator heavy REST client for Python
#################################################
.. 图片::https://img.shields.io/travis/bkryza/decorest.svg
:目标:https://travis ci.org/bkryza/decorest
…图像::https://img.shields.io/pypi/v/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
…图像::https://img.shields.io/pypi/l/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
…图片::https://img.shields.io/pypi/pyversions/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
python的声明性、基于装饰的rest客户端。
……角色::py(代码)
:语言:python
…内容:
概述
=
decorest_u库提供了一个易于使用的声明性rest api客户端接口,
在该接口中,使用decorators定义api方法会自动生成一个工作的rest客户端,而不需要额外的代码。实际上,库只提供了一个描述rest服务并与之交互的接口,实际工作由请求库在下面完成。代码块::python
reed_name):
"列出所有子品种"
打印(client.list_子品种('hound')
安装
====
代码块::bash
用法
==
基础
----
>对于大多数典型情况,用法应该相当简单。只需创建py:`decorest.restclient`的
子类并定义方法,这些方法将执行对实际rest服务的调用。您可以使用附加到
方法定义的decorators声明每个函数应该如何执行
对服务的请求。方法本身不需要任何实现,
除了docstring之外。
api客户机类定义完成后,只需创建一个实例,就可以了。此库依赖于请求库提供的功能,这意味着任何有效的命名参数(可以传递给请求)http调用也可以传递给客户端方法的调用,并按原样转发。"examples"中的示例客户机。
decorators
----
下面是所有受支持的decorators的列表以及简短的说明和
示例。有些decorator可以同时附加到客户端类和
方法,在这种情况下,类级decorator将应用于该类中的所有http方法
。此外,每个decorator都可以在方法调用期间直接重写,方法是提供一个名为decorator的命名参数s具有特定http方法的请求以及作为参数提供的相对于
端点的路径。路径可以包含括在大括号中的变量,例如:
。代码块::python
@get('breed/{breed_name}/list')
def list_子品种(self,breed_name):
"列出所有子品种"
r/>~~~~~~~
将查询参数添加到请求中。url编码将应用于
值,使用:py:`urlencode`,例如:
。代码块::python
@get('breed/{breed戋name}/list')
@query('long戋names','longnames')
@query('limit')
def list戋u子品种(self,breed戋name,long戋names,limit=100):
"列出所有子品种"
方法参数的名称
,其值将被添加为相同名称的查询参数值
。
而不是方法参数名)。
此外,如果在方法声明中提供了默认值,则在调用过程中未提供此参数的值时,将使用该值。
例如,对上述方法的以下调用:
。代码块::python
将导致以下查询:
…代码块:
https://dog.ceo/api/breed/hound?longnames=1&;limit=100
此装饰符只能添加到方法中。
@form
~~~~~
例如:
…代码块::python
@post('breed')
@form('breed_name')
@form('breed_url','breed_wikipedia_link')
def add_breed(self,breed_name,breed_url):
"add sub breed"
终止方法参数的名称
,该方法参数的值将被添加为相同名称的查询参数值
。
如果提供了两个参数,则第二个参数将确定实际的
表单字段名称,该名称将在请求表单中使用(如果由于某种原因
它不能与方法参数名相同)。
/>向请求添加头密钥-值对,例如:
…代码块::python
@get('breed/{breed_name}/list')
@header('accept','application/json')
def list_子品种(self,breed_name):
"列出所有子品种"
类级
修饰符将被添加到每个方法中,并可以使用方法
级修饰符重写。
@body
~~~
body修饰符允许指定哪些方法参数应为请求提供
正文内容,例如:
。代码块::python
@post('pet')
@header('content-type','application/json')
@header('accept','application/json')
@body('pet')
def add_pet(self,pet):
"向商店添加新宠物"
:py:`@body'装饰器可以使用可选参数提供序列化
处理程序的ent,在将参数作为
正文内容传递之前,该处理程序将自动调用,正文内容可以是简单的lambda或具有某些
逻辑的更复杂的函数。例如:
…代码块::python
@post('pet')
@header('content-type','application/json')
@header('accept','application/json')
@body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"将新的pet添加到存储中"
使用:py:`json.dumps()`函数对作为"pet"参数值提供的字典进行omamaly stringify。
@on
~~
>默认情况下,request方法不会返回requests\response对象,
,但响应将取决于响应的内容类型。
e http请求成功,预期结果如下:
-:py:`response.json()`如果响应的内容类型为json
-:py:`response.content`如果内容类型为binary
-:py:`response.text`否则
如果请求失败,则调用:py:`response.raise_for_status()',并在代码中处理
如果需要其他行为,则可以为使用lambdas或函数的每个方法。提供的处理程序预计只接受一个参数,即请求响应对象,例如:
。代码块::python
@get('breed/{breed戋name}/list')
@header('accept','application/json')
@on(200,lambda r:r.json())
def list戋u子品种(self,breed戋name):
"列出所有子品种"
类将为接收
提供的状态代码的方法调用处理程序。
此装饰符的第一个参数必须是整数。在python 3上,还可以传递:py:`…`(即省略号)对象,它等价于
到:py:`httpstatus.any`。传递给此参数的任何其他值都将引发:py:`typeerror`.
@content
~~~~~~~~~~~
此装饰符是:py:`@header(`content-type',…)`,例如:
代码块::python
@post('pet')
@content('application/json')
@header('accept','application/json')
@body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"向商店添加新宠物"
@accept
~例如:
…代码块::python
@get('breed/{breed戋name}/list')
@content('application/json')
@accept('application/xml')
def list戋u子品种(self,breed戋name):
"列出所有子品种"
@endpoint
~/>然后不必在客户端构造函数中提供:
…代码块::python
@endpoint('https://dog.ceo/api')
class dog client(restclient):
"列出所有子品种"
def初始化(self,endpoint=none):
super(dogclient,self)。\uinit初始化(endpoint)
owever.
@timeout
~~~~~~~~~~
指定方法或整个api的默认超时值(以秒为单位)。
代码块::python
@endpoint('https://dog.ceo/api')
@timeout(5)
class dogclient(restclient):
"列出所有子品种"
@def初始(self,endpoint=none):
super(dogclient,self)。\uu初始(endpoint)
@stream
~指定返回二进制数据流的方法。
将此装饰器添加到方法将向请求调用添加一个:py:`stream=true`
参数,并在默认情况下返回整个请求
对象,然后可以使用例如:py:`iter\u content()`方法访问该对象。
。代码块::python
…
class myclient(restclient):
…
@get('stream/{n}/{m}')
@stream
@query('size')
@query('offset','off')
def stream(self,n,m,size,offset):
"get data range"
…
EAM(2,4,1024,200)作为R:对于R.iter_内容中的B(块大小=100):
content.append(b)
会话
--
基于请求库以
会话对象的形式提供的功能,会话可以显著提高
客户端的性能,以防出现多个响应执行并维护证书在
请求之间的信息中,例如会话cookie。
可以手动创建和关闭decorest中的会话:
。代码块::python
s.list\u subbries('hound')
s.list\u subbries('husky')
s.u close()
代码块::python
基本客户机
类。
如果需要对会话进行一些额外的自定义,则可以使用:py:``请求会话'属性:
代码块::python
特定于rest api的实际调用,
而不是它的规范,没有用于身份验证的decorator,
,而是可以在客户端对象中使用
:py:``u set``u auth()`方法设置身份验证对象(与'requests`
身份验证机制兼容),例如示例:
…代码块::python
client.\u set_auth(httpbasicauth('user','password')
with client.\u session()为s:
s.\u requests_session.verify='/path/to/cert.pem'
s.list_subbries('hound')
s.list_subbries('husky')
authenti阳离子对象将在两个常规的API调用中使用,也将在使用会话时使用。
在代码中。
客户端示例`.
注意事项
----
~~~~~~~~~~~~~~~~~~
>除http方法
decorator(例如:py:`@get()`)之外,decorator基本上可以按任何顺序添加,该方法应始终位于给定的
decorator列表的顶部。应该在http方法
decorators之上添加第三方decorators。
字典。如果这是一个问题,则decorest修饰符应与完整的
模块命名空间一起使用:
…代码块::python
@decorest.post('pet')
@decorest.content('application/json')
@decorest.header('accept','application/json')
@decorest.body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"将新宠物添加到商店"
与其他装饰程序的兼容性
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一般来说,应该在http方法decorators之上添加第三方decorators
,因为只有http decorators
发出实际的http请求。因此,试图包装实际调用的典型decorators应该得到http方法decorators返回的http可调用函数,例如:py:`@get()`。
目前,无法添加dec演说者,如:py:`@classmethod`
或:py:`@staticmethod`到api方法,因为调用需要客户端类的实例
。
license
==
版权所有2018 bartosz kryza<;bkryza@gmail.com>;
");
除非符合许可证,否则您不得使用此文件。
您可以在http://www.apache.org/licenses/license-2.0
在"按原样"的基础上,
没有任何形式的保证或条件,无论是明示的还是默示的。
请参阅许可证,了解管辖许可的特定语言和许可证下的限制。
_测试:https://github.com/bkryza/decorest/tree/master/tests
…_请求:https://github.com/requests/requests
…_`请求会话`:http://docs.python requests.org/en/master/user/advanced/会话对象
…_装饰:https://github.com/bkryza/decorest
…_`描述符对象`:https://docs.python.org/3/c-api/descriptor.html
。_` petstore swagger客户端示例`:https://github.com/bkryza/decorest/blob/master/examples/swagger_petstore/petstore_client.py
#################################################
.. 图片::https://img.shields.io/travis/bkryza/decorest.svg
:目标:https://travis ci.org/bkryza/decorest
…图像::https://img.shields.io/pypi/v/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
…图像::https://img.shields.io/pypi/l/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
…图片::https://img.shields.io/pypi/pyversions/decorest.svg
:目标:https://pypi.python.org/pypi/decorest
python的声明性、基于装饰的rest客户端。
……角色::py(代码)
:语言:python
…内容:
概述
=
decorest_u库提供了一个易于使用的声明性rest api客户端接口,
在该接口中,使用decorators定义api方法会自动生成一个工作的rest客户端,而不需要额外的代码。实际上,库只提供了一个描述rest服务并与之交互的接口,实际工作由请求库在下面完成。代码块::python
reed_name):
"列出所有子品种"
打印(client.list_子品种('hound')
安装
====
代码块::bash
用法
==
基础
----
>对于大多数典型情况,用法应该相当简单。只需创建py:`decorest.restclient`的
子类并定义方法,这些方法将执行对实际rest服务的调用。您可以使用附加到
方法定义的decorators声明每个函数应该如何执行
对服务的请求。方法本身不需要任何实现,
除了docstring之外。
api客户机类定义完成后,只需创建一个实例,就可以了。此库依赖于请求库提供的功能,这意味着任何有效的命名参数(可以传递给请求)http调用也可以传递给客户端方法的调用,并按原样转发。"examples"中的示例客户机。
decorators
----
下面是所有受支持的decorators的列表以及简短的说明和
示例。有些decorator可以同时附加到客户端类和
方法,在这种情况下,类级decorator将应用于该类中的所有http方法
。此外,每个decorator都可以在方法调用期间直接重写,方法是提供一个名为decorator的命名参数s具有特定http方法的请求以及作为参数提供的相对于
端点的路径。路径可以包含括在大括号中的变量,例如:
。代码块::python
@get('breed/{breed_name}/list')
def list_子品种(self,breed_name):
"列出所有子品种"
r/>~~~~~~~
将查询参数添加到请求中。url编码将应用于
值,使用:py:`urlencode`,例如:
。代码块::python
@get('breed/{breed戋name}/list')
@query('long戋names','longnames')
@query('limit')
def list戋u子品种(self,breed戋name,long戋names,limit=100):
"列出所有子品种"
方法参数的名称
,其值将被添加为相同名称的查询参数值
。
而不是方法参数名)。
此外,如果在方法声明中提供了默认值,则在调用过程中未提供此参数的值时,将使用该值。
例如,对上述方法的以下调用:
。代码块::python
将导致以下查询:
…代码块:
https://dog.ceo/api/breed/hound?longnames=1&;limit=100
此装饰符只能添加到方法中。
@form
~~~~~
例如:
…代码块::python
@post('breed')
@form('breed_name')
@form('breed_url','breed_wikipedia_link')
def add_breed(self,breed_name,breed_url):
"add sub breed"
终止方法参数的名称
,该方法参数的值将被添加为相同名称的查询参数值
。
如果提供了两个参数,则第二个参数将确定实际的
表单字段名称,该名称将在请求表单中使用(如果由于某种原因
它不能与方法参数名相同)。
/>向请求添加头密钥-值对,例如:
…代码块::python
@get('breed/{breed_name}/list')
@header('accept','application/json')
def list_子品种(self,breed_name):
"列出所有子品种"
类级
修饰符将被添加到每个方法中,并可以使用方法
级修饰符重写。
@body
~~~
body修饰符允许指定哪些方法参数应为请求提供
正文内容,例如:
。代码块::python
@post('pet')
@header('content-type','application/json')
@header('accept','application/json')
@body('pet')
def add_pet(self,pet):
"向商店添加新宠物"
:py:`@body'装饰器可以使用可选参数提供序列化
处理程序的ent,在将参数作为
正文内容传递之前,该处理程序将自动调用,正文内容可以是简单的lambda或具有某些
逻辑的更复杂的函数。例如:
…代码块::python
@post('pet')
@header('content-type','application/json')
@header('accept','application/json')
@body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"将新的pet添加到存储中"
使用:py:`json.dumps()`函数对作为"pet"参数值提供的字典进行omamaly stringify。
@on
~~
>默认情况下,request方法不会返回requests\response对象,
,但响应将取决于响应的内容类型。
e http请求成功,预期结果如下:
-:py:`response.json()`如果响应的内容类型为json
-:py:`response.content`如果内容类型为binary
-:py:`response.text`否则
如果请求失败,则调用:py:`response.raise_for_status()',并在代码中处理
如果需要其他行为,则可以为使用lambdas或函数的每个方法。提供的处理程序预计只接受一个参数,即请求响应对象,例如:
。代码块::python
@get('breed/{breed戋name}/list')
@header('accept','application/json')
@on(200,lambda r:r.json())
def list戋u子品种(self,breed戋name):
"列出所有子品种"
类将为接收
提供的状态代码的方法调用处理程序。
此装饰符的第一个参数必须是整数。在python 3上,还可以传递:py:`…`(即省略号)对象,它等价于
到:py:`httpstatus.any`。传递给此参数的任何其他值都将引发:py:`typeerror`.
@content
~~~~~~~~~~~
此装饰符是:py:`@header(`content-type',…)`,例如:
代码块::python
@post('pet')
@content('application/json')
@header('accept','application/json')
@body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"向商店添加新宠物"
@accept
~例如:
…代码块::python
@get('breed/{breed戋name}/list')
@content('application/json')
@accept('application/xml')
def list戋u子品种(self,breed戋name):
"列出所有子品种"
@endpoint
~/>然后不必在客户端构造函数中提供:
…代码块::python
@endpoint('https://dog.ceo/api')
class dog client(restclient):
"列出所有子品种"
def初始化(self,endpoint=none):
super(dogclient,self)。\uinit初始化(endpoint)
owever.
@timeout
~~~~~~~~~~
指定方法或整个api的默认超时值(以秒为单位)。
代码块::python
@endpoint('https://dog.ceo/api')
@timeout(5)
class dogclient(restclient):
"列出所有子品种"
@def初始(self,endpoint=none):
super(dogclient,self)。\uu初始(endpoint)
@stream
~指定返回二进制数据流的方法。
将此装饰器添加到方法将向请求调用添加一个:py:`stream=true`
参数,并在默认情况下返回整个请求
对象,然后可以使用例如:py:`iter\u content()`方法访问该对象。
。代码块::python
…
class myclient(restclient):
…
@get('stream/{n}/{m}')
@stream
@query('size')
@query('offset','off')
def stream(self,n,m,size,offset):
"get data range"
…
EAM(2,4,1024,200)作为R:对于R.iter_内容中的B(块大小=100):
content.append(b)
会话
--
基于请求库以
会话对象的形式提供的功能,会话可以显著提高
客户端的性能,以防出现多个响应执行并维护证书在
请求之间的信息中,例如会话cookie。
可以手动创建和关闭decorest中的会话:
。代码块::python
s.list\u subbries('husky')
s.u close()
代码块::python
基本客户机
类。
如果需要对会话进行一些额外的自定义,则可以使用:py:``请求会话'属性:
代码块::python
特定于rest api的实际调用,
而不是它的规范,没有用于身份验证的decorator,
,而是可以在客户端对象中使用
:py:``u set``u auth()`方法设置身份验证对象(与'requests`
身份验证机制兼容),例如示例:
…代码块::python
client.\u set_auth(httpbasicauth('user','password')
with client.\u session()为s:
s.\u requests_session.verify='/path/to/cert.pem'
s.list_subbries('hound')
s.list_subbries('husky')
authenti阳离子对象将在两个常规的API调用中使用,也将在使用会话时使用。
在代码中。
客户端示例`.
注意事项
----
>除http方法
decorator(例如:py:`@get()`)之外,decorator基本上可以按任何顺序添加,该方法应始终位于给定的
decorator列表的顶部。应该在http方法
decorators之上添加第三方decorators。
字典。如果这是一个问题,则decorest修饰符应与完整的
模块命名空间一起使用:
…代码块::python
@decorest.post('pet')
@decorest.content('application/json')
@decorest.header('accept','application/json')
@decorest.body('pet',lambda p:json.dumps(p))
def add_pet(self,pet):
"将新宠物添加到商店"
与其他装饰程序的兼容性
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一般来说,应该在http方法decorators之上添加第三方decorators
,因为只有http decorators
发出实际的http请求。因此,试图包装实际调用的典型decorators应该得到http方法decorators返回的http可调用函数,例如:py:`@get()`。
目前,无法添加dec演说者,如:py:`@classmethod`
或:py:`@staticmethod`到api方法,因为调用需要客户端类的实例
。
license
==
版权所有2018 bartosz kryza<;bkryza@gmail.com>;
");
除非符合许可证,否则您不得使用此文件。
您可以在http://www.apache.org/licenses/license-2.0
在"按原样"的基础上,
没有任何形式的保证或条件,无论是明示的还是默示的。
请参阅许可证,了解管辖许可的特定语言和许可证下的限制。
_测试:https://github.com/bkryza/decorest/tree/master/tests
…_请求:https://github.com/requests/requests
…_`请求会话`:http://docs.python requests.org/en/master/user/advanced/会话对象
…_装饰:https://github.com/bkryza/decorest
…_`描述符对象`:https://docs.python.org/3/c-api/descriptor.html
。_` petstore swagger客户端示例`:https://github.com/bkryza/decorest/blob/master/examples/swagger_petstore/petstore_client.py