turicas / brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)
https://brasil.io/
GNU General Public License v3.0
923 stars 145 forks source link

Suportar ?format=jsonld|rdf|csv? #5

Closed dukex closed 6 years ago

dukex commented 10 years ago

query string do formato sai fora da idéia do REST, acho que esses formatos são interessantes mas não vejo com uma prioridade

turicas commented 10 years ago

A ideia de suportar outros formatos de saída é facilitar o uso em outros softwares ou por usuários não-programadores (exemplo: CSV).

Eu não sei o quanto isso "foge" da filosofia REST, visto que (na minha visão) query strings devem ser usadas para modificar o conteúdo do recurso que será devolvido. A adição de ?formato= seria apenas para facilitar o uso da API, fazendo com que recursos pudessem ser facilmente linkados em qualquer site, com representação direta em formatos que não o JSON-LD. O fato de suportar isso não quer dizer que não seria suportada alteração do formato de saída através de requisição pelo Content-Type.

dukex commented 10 years ago

E por que não usar o formato no final do arquivo? .csv .rdf etc?

turicas commented 10 years ago

@dukex, isso é "menos REST" do que usar ?format=csv, já que você estará alterando o nome do recurso HTTP (que, na verdade, é o mesmo, você só está pedindo que esse mesmo recurso seja representado em outro formato).

rennerocha commented 10 years ago

Se for seguir REST a risca, o formato retornado deveria ser de acordo com o header Accept enviado pelo cliente. Mas usar uma query string pode facilitar seu uso para um público maior (e menos conhecedor de headers de HTTP).

turicas commented 10 years ago

@rennerocha, como comentei: a ideia é só facilitar o uso. Então, as duas formas seriam suportadas, porém caso a query string esteja presente, ela será prioritária com relação ao header Accept.

Talvez o melhor não seja usar format e sim algo mais parecido com HTTP: sugiro content-type. Exemplo: /unidades-federativas/rj/?content-type=n3.