# Potencial bug na API - endpoint "Obter uma lista pública de usuários"

**URL:** https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378
**Category:** Bug
**Tags:** rest-api
**Created:** [Agosto 10, 2020, 3:59pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378 "2020-08-10T15:59:10Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![hollyw](https://avatars.discourse-cdn.com/v4/letter/h/4da419/32.png) [@hollyw](https://meta.discourse.org/u/hollyw)
#### Post date: [Agosto 10, 2020, 3:59pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/1 "2020-08-10T15:59:10Z")

</div>

Estava apenas fazendo alguns testes com o endpoint “get public list of users” e precisei usar paginação para obter os usuários restantes. Usei o campo `load_more_directory_items` para obter o caminho da próxima página, que foi listado como `/directory_items?order=days_visited&page=1&period=all`

No entanto, ao usar esse caminho, não obtive uma resposta correta da API com os usuários, e sim apenas algum HTML. Comparei com o endpoint original e parece que falta o `.json` após `directory_items`. Adicionar o `.json` ao caminho da próxima página pareceu funcionar. Isso seria um bug na API?

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [Agosto 11, 2020, 12:30am UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/2 "2020-08-11T00:30:35Z")

</div>

É provável que você tenha recebido a página HTML 404 not found.

 ![image](https://global.discourse-cdn.com/meta/original/3X/7/7/77519e8ec14731c6c80f22a1e075d310a977b911.png)

Ao usar a API, sempre utilize .json em qualquer solicitação à API, pois, embora a maioria dos endpoints retorne JSON por padrão, alguns retornam HTML. Parece que esta rota não tem um padrão definido, então, quando .json não foi passado, a rota não pôde ser encontrada.

Você realmente deveria especificar .json para não receber essa página de erro, mas me pergunto: se detectarmos uma chamada à API, devemos retornar uma resposta HTTP 404 real em vez de 200 com um corpo HTML ilegível? 🤔?

---

<div class="post-metadata">

### Author: ![hollyw](https://avatars.discourse-cdn.com/v4/letter/h/4da419/32.png) [@hollyw](https://meta.discourse.org/u/hollyw)
#### Post date: [Agosto 11, 2020, 2:19pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/4 "2020-08-11T14:19:53Z")

</div>

Certo, com o endpoint na chamada inicial da API, estou especificando .json. O problema que observei foi que, na resposta, o `load_more_directory_items` sob `meta` não especificou .json.

```plaintext
"meta": {
        "last_updated_at": "2020-08-11T11:40:43.000Z",
        "total_rows_directory_items": 1132,
        "load_more_directory_items": "/directory_items?order=days_visited&page=2&period=all"
    }

```

O valor é: `/directory_items?order=days_visited&page=2&period=all`

Quando deveria ser: `/directory_items.json?order=days_visited&page=2&period=all`

Como não inclui .json, tenho que atualizar manualmente essa string toda vez que preciso paginar.

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [Agosto 11, 2020, 4:02pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/5 "2020-08-11T16:02:32Z")

</div>

Ah, agora entendi o que você quer dizer. Deve ser uma correção rápida. Vou trabalhar nisso hoje.

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [Agosto 11, 2020, 7:56pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/6 "2020-08-11T19:56:30Z")

</div>

Empurrei uma correção para isso:

> <https://github.com/discourse/discourse/commit/ee366f7ac7d6855e8eb9d54b0f2e6743ad411238>
>
> The \`/directory\_items\` route needs to have a .json url, but the rails
> url helper… \`\_path\` doesn't return the format of the route.
> 
> I tried passing in a format options to \`directory\_items\_path\`. Which
> works in the rails console
> 
> \`\`\`
> \[8\] pry(main)\> directory\_items\_path(params.merge(:format =\> :json))
> =\> "/directory\_items.json?page=1"
> \`\`\`
> 
> but when I added that some logic to the controller it comes out as
> 
> \`\`\`
> /directory\_items?format=json&page=1
> \`\`\`
> 
> (which is actually how I expect it to work based on how you pass in the
> format param). Anyways, because I couldn't figure out how to pass a
> format to the \`\_path\` helper I just used URI.parse to append \`.json\`
> manually.

Ela deve estar disponível na sua instância se você executar `git pull` e reconstruir. Obrigado por trazer isso à tona 🙂

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [Agosto 12, 2020, 4:38pm UTC](https://meta.discourse.org/t/potential-api-bug-get-a-public-list-of-users-endpoint/160378/7 "2020-08-12T16:38:10Z")

</div>


