JSON: API сопоставляет коллекции с соответствующими - PullRequest
0 голосов
/ 07 февраля 2019

Что является лучшим методом сопоставления коллекций данных JSON: API с их соответствующими включениями.Учитывая следующий код, приведенный ниже ....

Что, если я захочу пройтись по каждому объекту и отобразить полную информацию о владельце для каждой записи объекта.Ожидает ли JSON: API, что я просто буду искать во включаемом массиве соответствующую запись владельца? 1003 *

find(included,data[$i].relationships.owner.data.id);

Будет ли find() проходить цикл во включенном массиве, чтобы найти владельца с совпадающим идентификатором в качестве владельца элементов коллекциив объекте отношений?

$(data).each(function(item){
var owner = find(included,'owner', item.relationships.owner.data.id)
})

Я не нашел ресурса, который объясняет это или, может быть, я неправильно понимаю суть json: api.Если кто-то может объяснить это или указать на ресурс, который относится к моему вопросу.Я был бы признателен.

{
  "links": {
    "self": "http://127.0.0.1/api/venues?include=owner"
  },
  "data": [
    {
      "id": "5c5b49188fd33c7a989ba9b6",
      "type": "venues",
      "attributes": {
        "name": "Kreiger - Smith",
        "address": "69675 Reilly Vista",
        "location": {
          "type": "Point",
          "coordinates": [
            -112.110492,
            36.098948
          ]
        },
        "events": [
          {
            "_id": "ad52825a8f4812e92f87b8c6",
            "name": "Cool Awesome Event!",
            "user": "b3daa77b4c04a9551b8781d0",
            "id": "ad52825a8f4812e92f87b8c6"
          }
        ],
        "created_at": "2019-02-07T14:27:13.207Z",
        "updated_at": "2019-02-07T14:27:13.207Z"
      },
      "relationships": {
        "owner": {
          "data": {
            "id": "b3daa77b4c04a9551b8781d0",
            "type": "users"
          }
        }
      }
    },
    {
      "id": "5c5b49188fd33c7a989ba9b7",
      "type": "venues",
      "attributes": {
        "name": "Oberbrunner Inc",
        "address": "1132 Kenyon Stravenue",
        "location": {
          "type": "Point",
          "coordinates": [
            -112.110492,
            36.098948
          ]
        },
        "events": [
          {
            "_id": "ad52825a8f4812e92f87b8c6",
            "name": "Cool Awesome Event!",
            "user": "b3daa77b4c04a9551b8781d0",
            "id": "ad52825a8f4812e92f87b8c6"
          }
        ],
        "created_at": "2019-02-07T14:27:13.207Z",
        "updated_at": "2019-02-07T14:27:13.207Z"
      },
      "relationships": {
        "owner": {
          "data": {
            "id": "b3daa77b4c04a9551b8781d0",
            "type": "users"
          }
        }
      }
    },
    {
      "id": "5c5b49188fd33c7a989ba9b8",
      "type": "venues",
      "attributes": {
        "name": "Gibson - Muller",
        "address": "8457 Hailie Canyon",
        "location": {
          "type": "Point",
          "coordinates": [
            -112.110492,
            36.098948
          ]
        },
        "events": [
          {
            "_id": "ad52825a8f4812e92f87b8c6",
            "name": "Cool Awesome Event!",
            "user": "b3daa77b4c04a9551b8781d0",
            "id": "ad52825a8f4812e92f87b8c6"
          }
        ],
        "created_at": "2019-02-07T14:27:13.208Z",
        "updated_at": "2019-02-07T14:27:13.208Z"
      },
      "relationships": {
        "owner": {
          "data": {
            "id": "a1881c06eec96db9901c7bbf",
            "type": "users"
          }
        }
      }
    }
  ],
  "included": [
    {
      "id": "b3daa77b4c04a9551b8781d0",
      "type": "users",
      "attributes": {
        "username": "killerjohn",
        "firstname": "John",
        "lastname": "Chapman"
      }
    },
    {
      "id": "a1881c06eec96db9901c7bbf",
      "type": "users",
      "attributes": {
        "username": "numerical25",
        "firstname": "Billy",
        "lastname": "Gordon"
      }
    }
  ]
}  

Это мое лучшее возможное решение.Но есть ли лучший способ?Похоже, гораздо больше кодирования, чтобы найти коллекции, связанные включенные данные

  axios.get('http://127.0.0.1:3000/api/venues?include=owner').then(function(response) {
    var  venues = response.data.data;
    var data = response.data;
    for(x in venues) {
      var owner = data.included.find(function(element) {
        if(element.id == venues[x].relationships.owner.data.id) {
          return element;
        }
      });
    }
  });
...