Skip to main content

Http request library for paginated response api

Project description

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

    # Autenticação
    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:
# Preparação dos parâmetros da requisição
    url = 'https://santodigital.atlassian.net/rest/agile/latest/board'
    auth = {
        'type': 'OAuth',
        'session': session
    }

    # Tipos de paginação:
    # 1 - Executa a api utilizando como controle uma flag (boolean)
    # 2 - Executa a api utilizando como controle variáveis de totais
    # 3 - Executa a api utilizando como controle o número da página pesquisada e a quantidade de itens por página
    paginate_type = 2
    object_name = 'values'
    params = {
        'init': 'startAt',
        'pageSize': 'maxResults',
        'pageSizeNum': 100,
        'total': 'total'
    }
e. Executar a chamada da lib santodigitial_request_full:
# Execução da requisição
    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:

# Autenticação
    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:
# Preparação dos parâmetros da requisição
    url = 'https://api.bitbucket.org/2.0/repositories/santodigital'
    auth = {
        'type': 'OAuth2',
        'token': token["access_token"]
    }

    # Tipos de paginação:
    # 1 - Executa a api utilizando como controle uma flag (boolean)
    # 2 - Executa a api utilizando como controle variáveis de totais
    # 3 - Executa a api utilizando como controle o número da página pesquisada e a quantidade de itens por página
    paginate_type = 3
    object_name = 'values'
    params = {
        'pageField': 'page',
        'pageLenField': 'pagelen'
    }
d. Executar a chamada da lib santodigitial_request_full:
# Execução da requisição
    res = RequestFull().execute(url, paginate_type, auth, object_name, params)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for santodigital-request-full, version 1.0.9
Filename, size File type Python version Upload date Hashes
Filename, size santodigital_request_full-1.0.9-py3-none-any.whl (6.9 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size santodigital-request-full-1.0.9.tar.gz (4.9 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page