Session
The session makes GET requests when you call instance of APIMethod
class that are returned as attributes of an API class instance.
Request
By default, the session (CodeSession, PasswordSession, RefreshSession)
tries to infer which signature generation circuit to use:
- if
uidandprivate_keyare not empty strings - client-server signature generation circuit is used - else if
secret_keyis not an empty string - server-server signature generation circuit is used - else exception is raised
You can explicitly set a signature generation circuit for signing requests
by passing to API one of the sessions below.
Client-Server signature generation circuit
Let's consider the following example of API request with client-server signature:
from aiomailru import TokenSession, API
session = TokenSession(
app_id=423004,
private_key='7815696ecbf1c96e6894b779456d330e',
secret_key='',
access_token='be6ef89965d58e56dec21acb9b62bdaa',
uid='1324730981306483817',
)
api = API(session)
friends = await api.friends.get()
It is equivalent to GET request:
https://appsmail.ru/platform/api
?method=friends.get
&app_id=423004
&session_key=be6ef89965d58e56dec21acb9b62bdaa
&sig=5073f15c6d5b6ab2fde23ac43332b002
The following steps were taken:
- request parameters were sorted and concatenated -
app_id=423004method=friends.getsession_key=be6ef89965d58e56dec21acb9b62bdaa uid, sorted request parameters,private_keywere concatenated -1324730981306483817app_id=423004method=friends.getsession_key=be6ef89965d58e56dec21acb9b62bdaa7815696ecbf1c96e6894b779456d330e- signature
5073f15c6d5b6ab2fde23ac43332b002calculated as MD5 of the previous string - signature appended to GET request parameters
For more details, see https://api.mail.ru/docs/guides/restapi/#client.
ClientSession
ClientSession is a subclass of TokenSession.
from aiomailru import ClientSession, API
session = ClientSession(app_id, 'private key', 'access token', uid)
api = API(session)
...
CodeClientSession
CodeClientSession is a subclass of CodeSession.
from aiomailru import CodeClientSession, API
async with CodeClientSession(app_id, 'private key', code, redirect_uri) as session:
api = API(session)
...
PasswordClientSession
PasswordClientSession is a subclass of PasswordSession.
from aiomailru import PasswordClientSession, API
async with PasswordClientSession(app_id, 'private key', email, passwd, scope) as session:
api = API(session)
...
RefreshClientSession
RefreshClientSession is a subclass of RefreshSession.
from aiomailru import RefreshClientSession, API
async with RefreshClientSession(app_id, 'private key', refresh_token) as session:
api = API(session)
...
Server-Server signature generation circuit
Let's consider the following example of API request with server-server signature:
from aiomailru import TokenSession, API
session = TokenSession(
app_id=423004,
private_key='',
secret_key='3dad9cbf9baaa0360c0f2ba372d25716',
access_token='be6ef89965d58e56dec21acb9b62bdaa',
uid='',
)
api = API(session)
friends = await api.friends.get()
It is equivalent to GET request:
https://appsmail.ru/platform/api
?method=friends.get
&app_id=423004
&session_key=be6ef89965d58e56dec21acb9b62bdaa
&sig=4a05af66f80da18b308fa7e536912bae
The following steps were taken:
- parameter
secure=1appended to parameters - request parameters were sorted and concatenated -
app_id=423004method=friends.getsecure=1session_key=be6ef89965d58e56dec21acb9b62bdaa - sorted request parameters and
secret_keywere concatenated -1324730981306483817app_id=423004method=friends.getsession_key=be6ef89965d58e56dec21acb9b62bdaa3dad9cbf9baaa0360c0f2ba372d25716 - signature
4a05af66f80da18b308fa7e536912baecalculated as MD5 of the previous string - signature appended to GET request parameters
For more details, see https://api.mail.ru/docs/guides/restapi/#server.
ServerSession
ServerSession is a subclass of TokenSession.
from aiomailru import ServerSession, API
session = ServerSession(app_id, 'secret key', 'access token')
api = API(session)
...
CodeServerSession
CodeServerSession is a subclass of CodeSession.
from aiomailru import CodeServerSession, API
async with CodeServerSession(app_id, 'secret key', code, redirect_uri) as session:
api = API(session)
...
PasswordServerSession
PasswordServerSession is a subclass of PasswordSession.
from aiomailru import PasswordServerSession, API
async with PasswordServerSession(app_id, 'secret key', email, password, scope) as session:
api = API(session)
...
RefreshServerSession
RefreshServerSession is a subclass of RefreshSession.
from aiomailru import RefreshServerSession, API
async with RefreshServerSession(app_id, 'secret key', refresh_token) as session:
api = API(session)
...
Response
By default, a session after executing request returns response's body
as dict if executing was successful, otherwise it raises exception.
You can pass pass_error parameter to TokenSession
for returning original response (including errors).
Error
In case of an error, by default, exception is raised.
You can pass pass_error parameter to TokenSession
for returning original error's body as dict: