Skip to main content

Python client implementation for json api. http://jsonapi.org/

Project description

jsonapi-requests

Build Status Coverage Status Latest Version Supported Python versions Wheel Status License

Python client implementation for json api. http://jsonapi.org/


Usage example

import jsonapi_requests

api = jsonapi_requests.Api.config({
    'API_ROOT': 'https://localhost/api/2.0',
    'AUTH': ('basic_auth_login', 'basic_auth_password'),
    'VALIDATE_SSL': False,
    'TIMEOUT': 1,
})

endpoint = api.endpoint('networks/cd9c124a-acc3-4e20-8c02-3a37d460df22/available-profiles')
response = endpoint.get()

for profile in response.data:
    print(profile.attributes['name'])
# Example output: "162 Sushi"

endpoint = api.endpoint('cookies')
endpoint.post(object=jsonapi_requests.JsonApiObject(
    type='cookies',
    attributes={
        'uuid': '09d3a4fff8d64335a1ee9f1d9d054161', 
        'domain': 'some.domain.pl'
    },
))
# Example output: <ApiResponse({'data': {'id': '81', 'attributes': {'uuid': '09d3a4fff8d64335a1ee9f1d9d054161', 'domain': 'some.domain.pl'}, 'type': 'cookies'}})>

Orm example

Lets say we have api endpoint: https://localhost/api/2.0/car/2 which returns

{
    "data":{
        "id": "2",
        "type": "car",
        "attributes": {
            "color": "red"
        },
        "relationships": {
            "driver": {
                "data": {
                    "id": "3", 
                    "type": "person"
                }
            }
        }
    },
    "included": [
        {
            "id": "3",
            "type": "person",
            "attributes": {
                "name": "Kowalski"
            },
            "relationships": {
                "married-to": {
                    "data": {
                        "id": "4", 
                        "type": "person"
                    }
                }
            }
        },
        {
            "id": "4",
            "type": "person",
            "attributes": {
                "name": "Kowalska"
            },
            "relationships": {
                "married-to": {
                    "data": {
                        "id": "3", 
                        "type": "person"
                    }
                }
            }
        },
    ]
}

Then we can run:

import jsonapi_requests

api = jsonapi_requests.orm.OrmApi.config({
    'API_ROOT': 'https://localhost/api/2.0',
    'AUTH': ('basic_auth_login', 'basic_auth_password'),
    'VALIDATE_SSL': False,
    'TIMEOUT': 1,
})

class Person(jsonapi_requests.orm.ApiModel):
    class Meta:
        type = 'person'
        api = api

    name = jsonapi_requests.orm.AttributeField('name')
    married_to = jsonapi_requests.orm.RelationField('married-to')

class Car(jsonapi_requests.orm.ApiModel):
    class Meta:
        type = 'car'
        api = api

    color = jsonapi_requests.orm.AttributeField('color')
    driver = jsonapi_requests.orm.RelationField('driver')

car = Car.from_id("2")

car.color # request happens here
# Example output: 'red'

car.driver.name
# Example output:  'Kowalski'

car.driver.married_to.name
# Example output: 'Kowalska'

car.driver.married_to.married_to.name
# Example output: 'Kowalski'

Authorization HTTP header forwarding in Flask application

When using jsonapi_requests with Flask, we can set jsonapi_requests.auth.FlaskForwardAuth() as AUTH configuration option to copy authorization header from current request context. It can be useful when fetching resources from different microservices.

Installation with flask support:

pip install jsonapi-requests[flask]

Example usage:

import jsonapi_requests

api = jsonapi_requests.Api.config({
    'API_ROOT': 'https://localhost/api/2.0',
    'AUTH': jsonapi_requests.auth.FlaskForwardAuth(),
})

Documentation

For more documentation check our wiki.

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

jsonapi_requests-0.8.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

jsonapi_requests-0.8.0-py2.py3-none-any.whl (13.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file jsonapi_requests-0.8.0.tar.gz.

File metadata

  • Download URL: jsonapi_requests-0.8.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.2

File hashes

Hashes for jsonapi_requests-0.8.0.tar.gz
Algorithm Hash digest
SHA256 baacf281d831debeb7233e9cd88936f3bf8b681d6c1948e7c508ad2f403e55ba
MD5 70f510ca5d1721b890a2f2be4bdba516
BLAKE2b-256 7c9c100fb1d24aeb4a86b6fffdf7cab5d393080440dc5c203648ee34d981937c

See more details on using hashes here.

File details

Details for the file jsonapi_requests-0.8.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for jsonapi_requests-0.8.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7ab04516cc1f5eb7a30293fd5b3ea00ca6d8c14701994da773ca00d7425aabe4
MD5 dbd963b5a7b2371eac8790a1a0b4e760
BLAKE2b-256 fa9033e7d7ddf150144af3b99b5a9aba265e1079bd13be7b55605bfb09483a8a

See more details on using hashes here.

Supported by

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