2017-02-14 6 views
2

Я сделал API JSON, используя Laravel с Laravel 5 JSON API Transformer package, который был включен в перечень jsonapi.orgJSON API: Правильный способ показать ссылки?

В настоящем время, все работает, как и ожидался, ответ образца из моего API, как (кстати проверка не удалась, так что я взял взгляд на jsonapi спецификации):

{ 
    "data": [ 
    { 
     "type": "inventory", 
     "id": "INV0001", 
     "attributes": { 
     "inv_inventory_id": "INV0001", 
     "inv_owner_company_id": 1, 
     "inv_owner_department_id": 1, 
     "inv_user_department_id": 1, 
     "inv_user_worker_id": 1, 
     "title": "Schreibtisch" 
     }, 
     "links": { 
     "self": { 
      "href": "http://127.0.0.1:8000/api/v2/inventory/INV0001" 
     }, 
     "user": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1" 
     }, 
     "owner_dept": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1" 
     }, 
     "owner_comp": { 
      "href": "http://127.0.0.1:8000/api/v2/company/1" 
     } 
     }, 
     "relationships": { 
     "worker": { 
      "data": { 
      "type": "worker", 
      "id": "1" 
      } 
     }, 
     "department": { 
      "data": { 
      "type": "department", 
      "id": "1" 
      } 
     }, 
     "company": { 
      "data": { 
      "type": "company", 
      "id": "1" 
      } 
     } 
     } 
    } 
    ], 
    "included": [ 
    { 
     "type": "worker", 
     "id": "1", 
     "attributes": { 
     "wrk_forename": "Moritz", 
     "wrk_surname": "ASDF", 
     "wrk_department_id": 2, 
     "wrk_homeoffice": true, 
     "wrk_room_id": 1 
     }, 
     "links": { 
     "self": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1" 
     }, 
     "hardware": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1/hardware" 
     }, 
     "software": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1/software" 
     }, 
     "inventory": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1/inventory" 
     }, 
     "accessory": { 
      "href": "http://127.0.0.1:8000/api/v2/worker/1/accessory" 
     } 
     } 
    }, 
    { 
     "type": "department", 
     "id": "1", 
     "attributes": { 
     "department": "Entwicklung", 
     "dept_floor_id": 3 
     }, 
     "links": { 
     "self": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1" 
     }, 
     "floor": { 
      "href": "http://127.0.0.1:8000/api/v2/floor/3" 
     }, 
     "hardware": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1/hardware" 
     }, 
     "software": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1/software" 
     }, 
     "inventory": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1/inventory" 
     }, 
     "accessory": { 
      "href": "http://127.0.0.1:8000/api/v2/department/1/accessory" 
     } 
     } 
    }, 
    { 
     "type": "company", 
     "id": "1", 
     "attributes": { 
     "company": "GermanPersonnel", 
     "com_building_id": 1 
     }, 
     "links": { 
     "self": { 
      "href": "http://127.0.0.1:8000/api/v2/company/1" 
     } 
     } 
    } 
    ], 
    "links": { 
    "self": { 
     "url": "http://127.0.0.1:8000/api/v2/inventory?page[number]=1&page[size]=10" 
    }, 
    "first": { 
     "url": "http://127.0.0.1:8000/api/v2/inventory?page[number]=1&page[size]=10" 
    }, 
    "last": { 
     "url": "http://127.0.0.1:8000/api/v2/inventory?page[number]=1&page[size]=10" 
    } 
    }, 
    "meta": { 
    "page": { 
     "total": 1, 
     "last": 1, 
     "number": 1, 
     "size": 10 
    } 
    }, 
    "jsonapi": { 
    "version": "1.0" 
    } 
} 

Но в соответствии со спецификациями на jsonapi.org ссылка должна выглядеть

"links": { 
    "self": "http://127.0.0.1:8000/api/v2/inventory/INV0001" 
    }, 

Моего вопрос:

Является ли законным отображать ссылку, как в моем примере, как объект с "href"? Я довольно смущен, потому что пакет, который я использовал, был , указанным на jsonapi.org, но, похоже, не соответствует спецификациям.

BTW: Мой английский может быть немного запутанным, но я надеюсь, что я descriped моей проблемы, а также возможным

+1

Я никогда не видел использование API 'href' для обозначения ссылки. Обычно это что-то вроде 'foo_url: http://www.coolapi.com/api/v3/foo/12 '' – jready

+0

Так что отображение ссылки как строки является правильным способом? –

ответ

1

Это фактически действует JSON выхода API база на спецификации,

http://jsonapi.org/format/#document-links

Если указано, элемент ссылки может использоваться для представления ссылок. Значение каждого члена ссылки ДОЛЖНО быть объектом («объект ссылок»).

Действительный Образец Из спецификации

"links": { 
    "related": { 
    "href": "http://example.com/articles/1/comments", 
    "meta": { 
     "count": 10 
    } 
    } 
} 

Каждый член ссылки объекта является «ссылка». Ссылка должна быть представлена:

  • строка, содержащая ссылку ссылки.
  • объект («ссылка объект»), который может содержать следующие элементы:
    • HREF: строка, содержащая URL в ссылку в.
    • meta: метаобъект, содержащий нестандартную метаинформацию о ссылке.

Таким образом, ваш выход на самом деле действует.

Смежные вопросы