July 27th, 2020


Fork omi_async_http_client in


An async http client implemented with asyncio and backends


1.Install omi_async_http_client from `pip`

$pip install omi_async_http_client

or install from source code

$python install

2.Install backend for omi_async_http_client, both sync and async are supported

use an async backend, eg. [aiohttp]( or [httpx](

 $pip install aiohttp
 $pip install httpx

or use a traditional sync backends [requests](

 $pip install requests

3.Apply to your project.

Set up a TEMPLATE APIClient builder function from omi_async_http_client.APIClient,

omi_async_http_client will automatically fill backend parameters for execute a http request when use your TEMPLATE APIClient.

from omi_async_http_client import APIClient as APIClientBuilder
from app.config import settings
def my_api_client_builder(model):
    return APIClientBuilder(
        model=model, # None is OK
        http_backend="omi_async_http_client.AioHttpClientBackend", # choose aiohttp as backend
        resource_endpoint=settings.get("API_ENDPOINT_URL", ""),
        client_id=settings.get("API_ENDPOINT_CLIENT_ID", ""),
        client_secret=settings.get("API_ENDPOINT_CLIENT_SECRET", "")
MyAPIClient = my_api_client_builder

Define a user model for request, use `@RequestModel` decorator to define your API, alias `@api_request_model` will take same effort when using `@RequestModel`.

from pydantic import BaseModel
from typing import  List
from omi_async_http_client import RequestModel
@RequestModel(api_name="/staff/{id}", api_prefix="", api_suffix="")
class Staff(BaseModel):
    name:str = ""
    age:int = 0
    gender:str = "F"
class PagedStaff(BaseModel):

4.Test HTTP Client if is work, and enjoy omi_async_http_client.

client = APIClient(Staff) # user Staff to create a Apiclient
# to retrieve some datas from a Restful API
response = await client.retrieve(
    condition={  # extra_params for pageing
        'id':123, # will fill {id} placeholder, change /staff/{id} to /staff/123.
        'name': 'python'
    extra_params={  # extra_params for pageing
        'page': 1,
        'offset': 1,
        'limit': 10

5.We implemented a demo api provider use [FastAPI]( to show How to use this library. and testing is included.

@See for detail

Comments are closed.