JSON API - как формировать сегменты URI при извлечении данных из внешнего источника - PullRequest
0 голосов
/ 26 марта 2019

Я пишу спецификацию API, которая соответствует https://jsonapi.org/format/ стандарту. У меня проблемы с определением правильного формата URI для реализации в следующем сценарии.

Обзор:

Система инвентаризации компании содержит информацию о товарах и ценах. один продукт имеет много цен. Система инвентаризации передает данные в локальную систему через API, но с использованием первичного ключа системы инвентаризации. Локальная система должна собирать предоставленные данные в API и обновлять или создавать записи о ценах в локальной базе данных

например:

POST /products/..... ?? или POST / продукты /

{
   "data":{
       "externalId":"EIR-32432",
       "externalPriceId":xxx,
       "price":"xxx.xx",
       "currency":"USD"
   }
}

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы должны отправить запрос POST на URL, представляющий коллекцию этих ресурсов, чтобы создать ресурс в JSON: Спецификация API:

Ресурс можно создать, отправив запрос POST на URL-адрес, представляющий коллекцию ресурсов. Запрос ДОЛЖЕН включать один объект ресурса в качестве первичных данных. Объект ресурса ДОЛЖЕН содержать хотя бы член типа.

Сама спецификация не зависит от именования URL, но во всех примерах использует тип множественного ресурса. Если вы придерживаетесь того же соглашения, запрос на создание продукта должен быть POST /products.

Как сказано в приведенной выше цитате, запрос должен включать объект ресурса . Пример в вашем вопросе не является допустимым объектом ресурса, поскольку он пропускает type, а атрибуты не находятся под ключом attributes. Допустимый объект ресурса для создания продукта будет выглядеть так:

{
    "data":{
        "type": "products",
        "attributes": {
            "externalId": "EIR-32432",
            "externalPriceId": "xxx",
            "price": "xxx.xx",
            "currency": "USD"
        }
    }
}

Обратите внимание, что отношения не должны отображаться как атрибуты:

Хотя внешние ключи has-one (например, author_id) часто хранятся внутри вместе с другой информацией, которая должна быть представлена ​​в объекте ресурса, эти ключи НЕ ДОЛЖНЫ появляться в качестве атрибутов.

Из вашего примера не совсем ясно, являются ли externalId и externalPriceId отношениями в области действия вашего API или нет.

Более подробную информацию о создании ресурса в JSON: API вы найдете в самой спецификации: https://jsonapi.org/format/#crud-creating Также имеется пример.

0 голосов
/ 26 марта 2019

Вы можете проверить некоторые имена для URI здесь: https://restfulapi.net/resource-naming/

...