# APIs REST

Faça requisições HTTP de saída a partir de uma função usando a API `fetch`, cobrindo os métodos GET, DELETE, POST, PUT e PATCH com dados JSON. Use estes trechos de código quando sua função precisar chamar uma API REST, seja para ler dados, enviar um formulário ou atualizar um recurso, executando próximo ao usuário na rede global da Azion.

## Exemplos

### Get

```js
  var myHeaders = new Headers();
  myHeaders.append("Accept", "application/json; version=3");
  myHeaders.append("Authorization", "Token [TOKEN VALUE]");
  
  var requestOptions = {
    method: 'GET',
    headers: myHeaders,
    redirect: 'follow'
  };
  
  fetch("https://api.azionapi.net/digital_certificates/", requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));
```

### Delete

```js
  fetch('https://example.com/delete-item/' + id, {
   method: 'DELETE',
  })
  .then(res => res.text()) // or res.json()
  .then(res => console.log(res))
```

### Post

```js
  function createNewProfile(profile) {
      const formData = new FormData();
      formData.append('first_name', profile.firstName);
      formData.append('last_name', profile.lastName);
      formData.append('email', profile.email);
      return fetch('http://example.com/api/v1/registration', {
          method: 'POST',
          body: formData
      }).then(response => response.json())
  }
  createNewProfile(profile)
     .then((json) => {
         // handle success
      })
     .catch(error => error);
```

### Put

```js
  const putMethod = {
   method: 'PUT', // Method itself
   headers: {
    'Content-type': 'application/json; charset=UTF-8' // Indicates the content 
   },
   body: JSON.stringify(someData) // We send data in JSON format
  }
  // make the HTTP put request using fetch api
  fetch(url, putMethod)
  .then(response => response.json())
  .then(data => console.log(data)) // Manipulate the data retrieved back, if we want to do something with it
  .catch(err => console.log(err)) // Do something with the error
```

### Patch

```js
  const API_URL = 'https://api.azion.net/'                                           
  const API_PATH = 'api/v3/'
  fetch(API_URL + API_PATH + 'tasks', {
   headers: {
     'Accept': 'application/json',
     'Content-Type': 'application/json'
   },
   method: 'patch',                                                             
   body: JSON.stringify( { task: task } )                                       
  })
```

## Como funciona

Cada exemplo chama `fetch()` com uma URL e um objeto de opções cujo campo `method` seleciona o verbo HTTP. Metadados da requisição, como tokens de autorização e o `Content-Type`, são passados em `headers`, seja como uma instância de `Headers` ou como um objeto simples, enquanto os corpos são enviados como `FormData` ou como uma string JSON produzida por `JSON.stringify`. A promise retornada resolve em um `Response`, que os trechos de código leem com `.then(response => response.json())` ou `.text()` para consumir o conteúdo, e `.catch()` trata qualquer erro de rede ou de parsing. Executar essas requisições em uma arquitetura distribuída mantém a lógica de chamada próxima ao usuário.

## Recursos relacionados

- [Exemplos em JavaScript](/pt-br/documentacao/plataforma/functions/javascript-exemplos.md): Consulte os outros padrões de sintaxe da coleção.
- [Fetch API](/pt-br/documentacao/devtools/runtime/api-reference/fetch.md): Leia a referência da implementação de `fetch` que estes trechos de código chamam.
- [Web APIs](/pt-br/documentacao/devtools/runtime/api-reference/javascript.md): Verifique quais outras APIs JavaScript o Azion Runtime suporta.
- [Limites](/pt-br/documentacao/plataforma/functions/limites.md): Confirme quantas requisições de saída uma única invocação pode fazer.
- [Como usar o Real-Time Metrics](/pt-br/documentacao/plataforma/real-time-metrics/primeiros-passos.md): Leia o consumo que esta função gerou, produto por produto.
