Skip to main content

A lite client for restful APIs.

Project description

restful-client-lite Build Status

A lite client for RESTFul APIs with limited features.

It provides:

  • restful_client_lite.APIClient: client for eve token-auth apps
  • restful_client_lite.contrib.AliyunApiGatewayClient: client for apis generated by aliyun DataService (only GET is supported)
  • restful_client_lite.contrib.WangduoyunApiClient: client for Wangduoyun apis by WangDuoYun

WIP.(not stable before v0.1.0)

Installation

Lastest release PyPI

pipenv:

pipenv install restful_client_lite

pip:

pip install restful_client_lite

Dev

pipenv:

pipenv install -e git+https://github.com/huandzh/restful-client-lite#egg=restful-client-lite

pip:

pip install -e git+https://github.com/huandzh/restful-client-lite#egg=restful-client-lite

Usage

Assume that we have a restful api requiring Authorization:<token> in the header and using etag to control writes.

Create an API client:

from restful_client_lite import APIClient
api = APIClient("<api_root>", {"token": "<token>"})

Get from url:

res_get = api.get("<url>")

Post to url:

res_post = api.post("<url>", data={"<key>": "<value>"})

Patch url:

res_patch = api.patch("<url>", "<etag>", data={"<key>": "<value>"})

Patch url (fetch etag automatically in advance):

res_patch = api.patch_auto_etag("<url>", data={"<key>": "<value>"})

Delete url:

res_delete = api.delete("<url>", "<etag>")

Delete url (fetch etag automatically in advance):

res_delete = api.delete_auto_etag("<url>")

Subclass APIClient to create custom api client:

def sign(url):
    """some function return signature"""
    ...
    return <signed url>

class CustomAPIClient(APIClient):
    """custom api client"""

    def auth_headers(self, f: Callable) -> Callable:
        """custom auth headers"""
        @wraps(f)
        def wrapper(*args, **kwargs):
            headers = kwargs.get("headers", {}).copy()
            url = args[0]
            headers.update({"Signature": sign(url)})
            kwargs["headers"] = headers
            return f(*args, **kwargs)

3rd-party APIs

aliyun api gateway

AliyunApiGatewayClient :

  • support GET from aliyun-api-gateway apis (apis may generated by DataService)
  • handle authorization headers
  • doesn't sort url params
from restful_client_lite.contrib.aliyun import AliyunApiGatewayClient
api = AliyunApiGatewayClient(
    '<api_root>',
    {"app_id": '<app_id>',
    "app_secret": '<app_secret>'})
# make sure params in <url> are sorted
res = api.get('<url>')

wangduoyun api

WangduoyunApiClient:

  • support account apis
  • support graphql apis
# client adds required authorization data for POST
api = WangduoyunApiClient(
    "<api_root>",
    {"user_key": "<user_key>",
    "user_secret": "<user_secret>"})
res = api.post("<url>")
# client provides `get_sign` to get authorization params
api = WangduoyunApiClient(
    "<api_root>",
    {"user_key": "<user_key>",
    "user_secret": "<user_secret>"})
sign, timestamp = api.get_sign()
url = "?user_key={user_key}&timestamp={timestamp}&sign={sign}&source_id={source_id}&query={query}".format(
    user_key=api.auth['user_key'],
    timestamp=timestamp,
    sign=sign,
    source_id="<source_id>",
    query="<query>")
res = api.get(url)

Project details


Download files

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

Source Distribution

restful-client-lite-0.0.5.tar.gz (8.6 kB view hashes)

Uploaded Source

Built Distribution

restful_client_lite-0.0.5-py2.py3-none-any.whl (8.2 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page