Giter VIP home page Giter VIP logo

restful-client-lite's Introduction

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)

restful-client-lite's People

Contributors

huandzh avatar dependabot[bot] avatar

Watchers

 avatar

Forkers

huaruidu

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.