API REST para um pesador

5

Estou criando uma API REST para um pesador (para ser executado em um Raspberry Pi, integrado ao pesador) e fiquei me perguntando se minhas ideias são RESTful e corretas.

Eu tenho o recurso "medição" que você pode usar para buscar medições armazenadas anteriormente, usando uma ID para obter uma específica:

GET http://1.2.3.4/measurement/<id>

Eu estava pensando em usar o ID 0 como "a medida atual", ou seja, o que o pesador está pesando no momento da chamada.

Isso seria "correto"? Ou devo usar um recurso diferente?

    
por Bart Friederichs 26.04.2017 / 10:08
fonte

2 respostas

6

REST não se importa com a ortografia que você usa para o seu URI.

As considerações de design do URI normalmente fluem das necessidades dos seres humanos que trabalham com eles, em vez daqueles dos clientes (que tratam os identificadores como dados opacos). A estrutura do URI é principalmente hierárquica , com convenções que separam os dados hierárquicos do dados não hierárquicos . Mas essas diretrizes são convenções humanas, muito parecidas com as regras sobre nomes de variáveis em seus padrões de codificação.

/3fa527b4-1036-44b2-a7f3-7770d4b15beb

é um URI perfeitamente cromulento.

I was thinking to use ID 0 as "the current measurement", i.e. what the weigher is weighing at the moment of the call.

A semântica disso é perfeitamente razoável. Fielding, em sua tese que define REST, escreveu

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.

... The only thing that is required to be static for a resource is the semantics of the mapping, since the semantics is what distinguishes one resource from another.

Isso não é uma ortografia que eu recomendaria; Contudo. Ele cheira a MagicNumber . Para evitar mal-entendidos por parte de leitores humanos, normalmente usaria uma das outras recomendações aqui: /measurements/live , /measurements/current , /measurements?asOf=now , etc.

Como uma forma de mecânica, se a medição atual também tem um identificador permanente, eu redirecionaria as solicitações da corrente para a permanente.

GET /measurements/latest

302 See-Other
Location /measurements/12345

(novamente, no REST, é perfeitamente razoável ter muitos recursos que compartilham a mesma representação ou compartilhar a mesma representação no momento.)

    
por 26.04.2017 / 14:07
fonte
1

Não, isso é absolutamente errado. Isso significaria que a ID 0 não é, na verdade, um identificador, mas sim algo mágico que pode se referir a outra coisa toda vez que você usá-lo.

Em vez disso, ofereça uma opção para classificar seu índice de medição ( /measurements ) por hora, a medida mais recente primeiro. Se um chamador quiser obter a medida mais recente, basta buscar o índice e ler o mais recente:

GET http://1.2.3.4/measurements

[
  {
    "value": 78.3,
    "measuredAt": "2017-04-16T10:15:10.0Z"
  },
  {
    "value": 78.4,
    "measuredAt": "2017-04-16T10:15:09.5Z"
  },   
  {
    "value": 78.3,
    "measuredAt": "2017-04-16T10:15:09.0Z"
  },
  {
    "value": 78.2,
    "measuredAt": "2017-04-16T10:15:08.5Z"
  },
  ... and so forth
]

pseudo code:
function getCurrentMeasurement()
  measurements = GET http://1.2.3.4/measurements | json
  return measurements[0]
    
por 26.04.2017 / 10:52
fonte

Tags