Json API Smart
Is your client library which support ths JSON:API standard specified on JSON:API.
class BaseResource(JsonApiResource):
@staticmethod
def base_url(cls) -> str:
return "http://baseurl.com/"
class People(BaseResource):
id: str = resource_id()
first_name: str = attribute()
class Article(BaseResource):
id: str = resource_id()
title: str = attribute()
number: int = attribute()
some_date: date = attribute(decoder=date.fromisoformat)
some_optional: Optional[int] = attribute()
author: People = relationship()
Query it with:
# http://baseurl.com/articles/101
article = Article.find("101")
article.id # 101
article.title # JSON:API paints my bikeshed!
article.number # 1
article.some_optional # None
article.author.id # "9"
article.author.first_name # "Dan"
Query resources
Call your resources by building chains:
# http://baseurl.com/articles
articles = Article.all()
# http://baseurl.com/articles?price=5
articles = Article.with_params(price=5).all()
# http://baseurl.com/articles?filter[author]=101
articles = Article.where(author=101).all()
# http://baseurl.com/articles/101
articles = Article.find("101")