# Response

A interface `Response` representa uma resposta HTTP na [Fetch API](/pt-br/documentacao/devtools/runtime/api-reference/fetch/) do Azion Runtime. Uma function responde a uma requisição retornando um `Response` do seu [handler](/pt-br/documentacao/devtools/runtime/api-reference/handlers/), e `fetch()` resolve em um `Response`. Para mais informações, consulte [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) na MDN Web Docs.

> **nota**
>
> Com `azion dev`, uma resposta que `fetch()` retorna informa `type` como `default`, não `basic`, e `redirected` continua `false` depois que `fetch()` segue um redirecionamento. Uma resposta que você constrói informa os mesmos valores nos dois ambientes.

---

## Construtor

```javascript
new Response(body, init)
```

| Parâmetro | Tipo                                    | Obrigatório | Padrão | Descrição                                             |
| --------- | --------------------------------------- | ----------- | ------ | ----------------------------------------------------- |
| `body`    | Um dos tipos de corpo abaixo, ou `null` | Não         | `null` | Conteúdo do corpo da resposta.                        |
| `init`    | Object                                  | Não         | `{}`   | Opções que definem o status e os headers da resposta. |

O parâmetro `body` aceita estes tipos. Três deles definem um header `content-type` na resposta:

| Tipo de corpo                                                                          | `content-type` definido pelo construtor           |
| -------------------------------------------------------------------------------------- | ------------------------------------------------- |
| [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)                        | Nenhum                                            |
| `BufferSource`, como um `Uint8Array`                                                   | Nenhum                                            |
| [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)                | `multipart/form-data; boundary=<boundary>`        |
| [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream)    | Nenhum                                            |
| [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)  | `application/x-www-form-urlencoded;charset=UTF-8` |
| [`USVString`](https://developer.mozilla.org/en-US/docs/Web/API/USVString) (uma string) | `text/plain;charset=UTF-8`                        |
| `null`                                                                                 | Nenhum; o corpo é lido como uma string vazia      |

O objeto `init` aceita estas opções:

| Opção        | Tipo                                                                                              | Descrição                                                            |
| ------------ | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| `status`     | Number                                                                                            | Código de status da resposta, como `201`.                            |
| `statusText` | String                                                                                            | Mensagem de status que acompanha o código de status, como `Created`. |
| `headers`    | Objeto [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) ou um objeto simples | Headers da resposta.                                                 |

O construtor ignora uma opção `url`: a propriedade `url` de uma resposta construída é uma string vazia.

---

## Propriedades

`Response` implementa o corpo da Fetch API, por isso tem `body` e `bodyUsed` além das próprias propriedades:

| Propriedade  | Tipo             | Descrição                                                                                                                                                      |
| ------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `body`       | `ReadableStream` | Conteúdo do corpo, lido como um stream. Para mais informações, consulte [ReadableStream](/pt-br/documentacao/devtools/runtime/api-reference/readable-stream/). |
| `bodyUsed`   | Boolean          | `true` depois que o corpo é lido.                                                                                                                              |
| `headers`    | `Headers`        | Headers da resposta.                                                                                                                                           |
| `ok`         | Boolean          | `true` quando `status` está no intervalo 200–299.                                                                                                              |
| `redirected` | Boolean          | `true` quando `fetch()` seguiu pelo menos um redirecionamento para chegar à resposta.                                                                          |
| `status`     | Number           | Código de status da resposta, como `200`.                                                                                                                      |
| `statusText` | String           | Mensagem de status que acompanha o código de status, como `OK` para `200`.                                                                                     |
| `type`       | String           | Tipo da resposta: `basic` para uma resposta de `fetch()`, `default` para uma resposta que você constrói e `error` para `Response.error()`.                     |
| `url`        | String           | URL final de uma resposta de `fetch()`, depois dos redirecionamentos. Uma string vazia em uma resposta que você constrói.                                      |

---

## Métodos

| Método                           | Descrição                                                                                                                    |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `response.clone()`               | Retorna uma cópia da resposta. A cópia e a original leem, cada uma, o corpo completo.                                        |
| `response.json()`                | Lê o corpo e o interpreta como JSON. Retorna uma promise.                                                                    |
| `response.text()`                | Lê o corpo como uma string. Retorna uma promise.                                                                             |
| `Response.error()`               | Estático. Retorna uma resposta com `type` `error` e `status` `0`.                                                            |
| `Response.json(data)`            | Estático. Retorna uma resposta cujo corpo é `data` serializado como JSON, com `content-type` `application/json`.             |
| `Response.redirect(url, status)` | Estático. Retorna uma resposta de redirecionamento com o `status` que você passa e um header `location` definido como `url`. |

`redirect()` existe apenas como método estático: chame `Response.redirect()`, porque uma instância de `Response` não tem o método `redirect`.

---

## Exemplo

Este handler constrói uma resposta com um status, uma mensagem de status, um header e uma opção `url`. Em seguida, ele retorna as propriedades da resposta com `Response.json()`:

```javascript
export default {
  async fetch(request, env, ctx) {
    const response = new Response('x', {
      status: 201,
      statusText: 'Created',
      headers: { 'x-h': '1' },
      url: 'https://ignored.example/',
    });
    return Response.json({
      status: response.status,
      statusText: response.statusText,
      ok: response.ok,
      redirected: response.redirected,
      type: response.type,
      url: response.url,
      useFinalURL: response.useFinalURL,
      header: response.headers.get('x-h'),
      bodyType: response.body?.constructor?.name,
      bodyUsed: response.bodyUsed,
    });
  },
};
```

A function retorna estes valores da resposta. `"[undefined]"` marca uma propriedade que é `undefined`, e `url` está vazia porque o construtor ignora a opção `url`:

```json
{
 "status": 201,
 "statusText": "Created",
 "ok": true,
 "redirected": false,
 "type": "default",
 "url": "",
 "useFinalURL": "[undefined]",
 "header": "1",
 "bodyType": "ReadableStream",
 "bodyUsed": false
}
```

---

## Recursos relacionados

- [fetch](/pt-br/documentacao/devtools/runtime/api-reference/fetch.md): Como uma function envia uma requisição e recebe um `Response`.
- [Request](/pt-br/documentacao/devtools/runtime/api-reference/request.md): A requisição recebida e como construir uma para passar para `fetch()`.
- [ReadableStream](/pt-br/documentacao/devtools/runtime/api-reference/readable-stream.md): Como ler ou produzir o corpo de uma resposta como um stream.
- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): As outras Web APIs que o Azion Runtime suporta.
