Objetivo
Lib para executar chamadas em APIs com paginação, trazendo todos os registros de forma única.
Esta lib não possui métodos para realização dos passos de autenticação e do fluxo de oauth. Ela espera que a aplicação chamadora execute estes passos e informe qual o tipo de autenticação utilizada e o token / session gerado na chamada desta lib
Utilização
Requisitos
Instalar a lib pyjwt:
pip install -U pyjwt
Tipos de Autenticação Possíveis
-
OAuth1:
Exemplos disponíveis no arquivo examples/oauth1_api_request_until_bool.py e oauth1_api_request_until_total.py
a. Executar o comando abaixo para gerar as chaves pública e privada:
openssl genrsa -out oauth.pem 1024
openssl rsa -in oauth.pem -pubout -out oauth.pub
b. Guardar a chave pública (oauth.pem) em uma das pastas do projeto
c. Obter o client ID e client secret no provedor da API.
d. Na classe que irá solicitar a autenticação na API, executar os passos para autenticação OAuth1. Consultar a documentação da API que será chamada para obter a forma correta de autenticação.
Segue exemplo de autenticação OAuth1 com a API do jira:
import os
import requests
from requests_oauthlib import OAuth1
from santodigital_request_full import RequestFull
path = os.path.dirname(os.path.abspath(__file__));
rsa_private_key = None
with open(path + '/oauth.pem', 'r') as key_cert_file:
rsa_private_key = key_cert_file.read()
oauth = OAuth1(client_key = 'oauth-consumer',
rsa_key = rsa_private_key,
signature_method='RSA-SHA1',
resource_owner_key='******************************',
resource_owner_secret='******************************'
)
session = requests.Session()
session.auth = oauth
session.headers.update({'X-Atlassian-Token': 'nocheck'})
d. Preparar os parâmetros de consulta da API:
url = 'https://santodigital.atlassian.net/rest/agile/latest/board'
auth = {
'type': 'OAuth',
'session': session
}
paginate_type = 2
object_name = 'values'
params = {
'init': 'startAt',
'pageSize': 'maxResults',
'pageSizeNum': 100,
'total': 'total'
}
e. Executar a chamada da lib santodigitial_request_full:
res = RequestFull().execute(url, paginate_type, auth, object_name, params)
-
OAUth2:
Exemplo disponível no arquivo examples/oauth2_api_request.py
a. Obter a url de obtenção do token, o client ID e client secret no provedor da API.
b. Na classe que irá solicitar a autenticação na API, executar os passos para autenticação OAuth2. Consultar a documentação da API que será chamada para obter a forma correta de autenticação.
Segue exemplo de autenticação OAuth2 com a API do bitbucket:
client_id='**********************'
client_secret = '**********************'
token_url = 'https://bitbucket.org/site/oauth2/access_token'
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url=token_url, client_id=client_id, client_secret=client_secret)
c. Preparar os parâmetros de consulta da API:
url = 'https://api.bitbucket.org/2.0/repositories/santodigital'
auth = {
'type': 'OAuth2',
'token': token["access_token"]
}
paginate_type = 3
object_name = 'values'
params = {
'pageField': 'page',
'pageLenField': 'pagelen'
}
d. Executar a chamada da lib santodigitial_request_full:
res = RequestFull().execute(url, paginate_type, auth, object_name, params)