Правильный способ предоставить One-to-Many из API? - PullRequest
0 голосов
/ 14 января 2020

Я пробовал искать в Интернете и признаю, что могу не знать правильную терминологию, необходимую для поиска решения. Я в порядке со ссылками на материалы для чтения, но я не совсем уверен, с чего начать.

Для стека я использую Angular + Nest JS. Запланируйте интеграцию TypeORM с использованием Postgres в качестве базы данных.

У меня есть следующие объекты, где у бюджета есть один проект, а у проекта может быть много бюджетов:

export interface Budget {
  id: number;
  description: string;
  project_id: number;
  budget_type: string;
  budget_status: string;
}

export interface Project {
  id: number;
  project_number: string;
  project_title: string;
  project_status: string;
  client: string;
}

Для этого сценария, Я хочу показать список Бюджетов в таблице angular материала и показать «номер_проекта» в таблице вместо «идентификатор_проекта».

  1. Должен ли я изменить определение интерфейса бюджета, чтобы оно возвращалось Проект?

ИЛИ

Должно ли приложение запрашивать ресурс Project через API?

В общем, для сущностей, которые содержат ссылки на другие сущности с идентификатором. Стоит ли включать эти объекты в ответ от API или вкладывать их в ответ.

Следует ли изменить определение интерфейса бюджета, чтобы оно возвращало его проект? Озабоченность: для более высокой степени Во вложенных объектах может быть больше данных, чем необходимо.

{
    "budgets": [{
            "id": 1,
            "description": "platea dictumst",
            "project": {
                "id": 3,
                "project_number": "19139",
                "project_title": "neque aenean auctor gravida",
                "project_status": "Lost",
                "client": "Eabox"
            },
            "budget_type": "Change Order",
            "budget_status": "Approved"
        },
        {
            "id": 2,
            "description": "et commodo vulputate justo in blandit",
            "project": {
                "id": 78,
                "project_number": "19356",
                "project_title": "et eros vestibulum ac est",
                "project_status": "Active",
                "client": "Kimia"
            },
            "budget_type": "Original",
            "budget_status": "Lost"
        }
    ]
}

Должно ли приложение запрашивать ресурс проекта через API? Внимание: если У меня есть 100 бюджетов, это будет дополнительные 100 вызовов API, пока приложение ожидает загрузки таблицы.

{
  "budgets": [
    {
      "id": 1,
      "description": "platea dictumst",
      "project_id": 3,
      "budget_type": "Change Order",
      "budget_status": "Approved"
    },
    {
      "id": 2,
      "description": "et commodo vulputate justo in blandit",
      "project_id": 78,
      "budget_type": "Original",
      "budget_status": "Lost"
    }
  ]
}

1 Ответ

0 голосов
/ 14 января 2020

Я не понимаю массив. Вы спросили: «Должен ли я изменить определение интерфейса бюджета, чтобы он возвращал массив проектов?» но «у бюджета есть один проект, а у проекта может быть много бюджетов».

Не следует помещать массив проектов в бюджет. Кроме того, поскольку существует только один проект на бюджет ... Я не вижу, как это будет массив.

Здесь - это некоторое чтение, но вы хотите перечислить весь свой Бюджетная таблица. Вам нужны данные из другой таблицы (не только ID), чтобы вы могли выполнить соединение. Здесь - это сообщение StackOverflow о типах объединений. Вот пример, который получит номер_проекта для запроса SQL:

SELECT Budget.id, Budget.description, Project.project_number
FROM Budget
LEFT JOIN Project ON Budget.project_id = Budget.id

Поскольку это легко сделать в SQL, вам не нужно менять схему. При работе с SQL вы должны расставлять приоритеты один-ко-многим вместо многих-ко-многим, и вы должны использовать ключ от «многих», чтобы указать на «один», как вы сделали.

...