Упрощение дизайна Rest API - PullRequest
0 голосов
/ 03 мая 2020

Я хочу создать API контроллера дома для различных устройств (кондиционер, освещение, управление движением и т. Д. c), поэтому у меня есть следующее определение API, но каждое устройство имеет свои свойства и конфигурации, поэтому я подумал создать конечные точки некоторых типов.

GET / api / devices /

[{
  "deviceId": "1"
  "name": "Device 1",
}, {
  "deviceId": "2"
  "name": "Device 2",
}, {
  "deviceId": "3"
  "name": "Device 3"
}]

GET / api / device / 1

{
  "deviceId": "1"
  "name": "Device 1",
}

GET / api / кондиционирование / unit / 1 / статус

{
  "deviceId": "1"
  "temperature: 22" 
  "state": 1"
}

GET / API / освещения / переключатель / 2 / статус

{
  "deviceId": "2"
  "state": 1"
}

GET / API / освещения / диммер / 3 / статус

{
  "deviceId": "3"
  "state": 1"
  "dim": 70"
}

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

Проблема в том, что я не знаю, правильно ли это, потому что у вас есть две конечные точки, указывающие на тот же ресурс

GET / API / устройство / 1

GET / API / кондиционер / устройство / 1

1 Ответ

0 голосов
/ 03 мая 2020

REST не скажет вам, насколько мелкозернистыми должны быть ваши ресурсы.

Крупнозернистые ресурсы сокращают количество циклов, которые вам нужно совершить - подумайте Объект передачи данных .

Мелкозернистые ресурсы позволяют лучше контролировать политики кэширования.

Я не знаю, верно ли это, поскольку у вас есть две конечные точки, указывающие на один и тот же ресурс

Хорошо, если поведение кэширования удовлетворительное. Что касается компонентов общего назначения, два разных URI означают два разных ресурса, и, следовательно, представления этих ресурсов в локальном кэше будут независимы друг от друга.

Так сколько проблема в том, что если у вас есть старая копия одного ресурса и бесплатная sh копия другого?

Например: если вы используете небезопасные HTTP-запросы для управления своим домом, то каждый успешный POST / PUT / PATCH аннулирует кэшированные представления целевого URI , но оставит другие представления без изменений. Таким образом, у вас может быть совершенно новая копия одного ресурса и устаревшая копия другого ресурса, которая относится к тому же устройству в вашем доме.

...