Pergunta

Dado este serviço para obter informações sobre um hotel:

> GET /hotel/{id}

< HTTP/1.1 200 OK
< <hotel>
<   <a>aaa</a>
<   <b>aaa</b>
>   <biggie>aaa....I am 300K</biggie >
< </hotel>

O problema é que biggie é 300K e nós não queremos devolvê-lo com cada resposta. Qual é a maneira RESTful para carga lenta este valor?

devemos configurar dois recursos:

> GET /hotel/{id}

< HTTP/1.1 200 OK
< <hotel>
<   <a>aaa</a>
<   <b>aaa</b>
< </hotel>

e ..

> GET /hotel/{id}/biggie

< HTTP/1.1 200 OK
< <biggie>
<   <val>aaa....I am 300K</val>
< </biggie>

E você só solicitar GET /hotel/{id}/biggie quando você realmente precisa que os dados?

Isso poderia funcionar .. embora não haja nada de especial sobre biggie exceto que é um grande conjunto de dados. Eu acho que é mais agradável para manter tudo no nível hotel como todos os atributos são realmente apenas os atributos do hotel.

Foi útil?

Solução

Não se esqueça, hipermídia é seu amigo.

GET /hotel/{id}

HTTP/1.1 200 OK
<hotel Id="99">
  <a>aaa</a>
  <b>aaa</b>
  <biggieLink href="/Hotel/99/Biggie"/>
</hotel>

ou você mesmo pode fazer

GET /hotel/{id}

HTTP/1.1 200 OK
<hotel Id="99">
  <a>aaa</a>
  <b>aaa</b>
  <biggieSynopsis href="/Hotel/99/Biggie">
    <title>Here is a a summary of biggie</title>
  </biggieSynopsis
</hotel>

Outras dicas

Configurando-o como dois recursos iria funcionar, mas se você não fizer assim, você pode olhar para usando o cache; dependendo da natureza dos dados, que possa realmente economizar mais carga do que dividir em vários recursos.

Eu acho que a solução está bem. Não há uma resposta perfeita, mas três possibilidades são:

  1. Enviar todos os atributos, cada vez
  2. atributos Enviar individualmente, conforme solicitado (/{id}/a, /{id}/b, /{id}/biggie)
  3. Enviar todos os atributos, exceto para os incomuns, como você sugere.

1 e 2 são bons porque eles são uniformes, mas 3 faz sentido no seu caso, ou no caso em que um pedaço de dados requer credenciais de login, por exemplo.

(2 também tem o inconveniente de exigir maior entrosamento com o solicitante, que tem de saber o nome de cada atributo.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top