Como “carga lenta” de uma maneira RESTful?
-
06-07-2019 - |
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
.
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:
- Enviar todos os atributos, cada vez
- atributos Enviar individualmente, conforme solicitado (
/{id}/a
,/{id}/b
,/{id}/biggie
) - 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.)