Yours Truly, Famous Inc.
Никита Юстовский, Tvil.ru
JSON:API - это спецификация, описывающая каким образом клиент должен запрашивать получение и изменение ресурсов, а также как именно должен сервер отвечать на такие запросы.
Общее соглашение как для фронтенда, так и для бэкенда
Готовые инструменты
Достаточно прост в освоении
GET /products/?filter[country]=Russia&include=photos
Accept: application/vnd.api+json
200 OK
Content-Type: application/vnd.api+json
...
"data": [
{
"type": "products",
"id": "123456",
"attributes": {
"name": "Томат",
...
...
"relationships": {
"photos": {
"data": [
{
"type": "photos",
"id": "123456"
...
...
"included": [
{
"type": "photos",
"id": "123456",
"attributes": {
"url": "https://json-api-slides.example/media/photos/123456"
...
POST /products
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"data": {
"type": "products",
"attributes": { "name": "Томат" }
...
"relationships": {
"trademark": {
"data": { "type": "trademarks", "id": "123456" }
...
PATCH /products/123456
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
...
"data": {
"type": "products",
"id": "123456",
"attributes": {
"name": "Помидор",
...
DELETE /products/123456
Accept: application/vnd.api+json
https://jsonapi.org/implementations/#client-libraries-javascript
GET /products/?filter[country]=Russia&include=photos
import JsonApi from 'devour-client'
const jsonApi = new JsonApi({ apiUrl:'https://json-api-slides.example' })
jsonApi.define('product', { name: '' })
jsonApi.findAll('product', { filter: { country: 'Russia' }, include: 'photos' })
jsonApi.define('photo', {
id: '',
url: '',
})
jsonApi.define('product', {
name: '',
photos: {
jsonApi: 'hasMany',
type: 'photos',
}
})