Criando uma aplicação Stateful com Node
Uma aplicação stateful é aquela que mantém o estado do cliente entre diferentes requisições. Isso significa que o servidor mantém informações em memória sobre o estado de cada usuário e pode usar essas informações para personalizar as respostas. Por outro lado, uma aplicação stateless não mantém informações sobre o estado do usuário entre requisições individuais. Cada requisição é tratada de forma independente, sem referência ao estado anterior.
No código abaixo, temos uma aplicação stateful criada com Node. Ela consiste em um servidor HTTP simples que permite a criação e listagem de usuários. A cada requisição POST para /users
, um novo usuário é adicionado ao array users
que comportá-se como um banco de dados em memória. Quando uma requisição GET é feita para /users
, a lista de usuários é retornada como resposta.
import http from 'node:http'
const users = []
const server = http.createServer((request, response) => {
const { method, url } = request
if (method === 'GET' && url === '/users') {
return response
.setHeader('Content-type', 'application/json')
.end(JSON.stringify(users))
}
if (method === 'POST' && url === '/users') {
users.push({
id: 1,
name: 'John Doe',
email: 'johndoe@example.com'
})
return response.end('Criação de usuário')
}
return response.end('Hello World!')
})
server.listen(3000)
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 58
Date: Sat, 27 Apr 2024 02:08:21 GMT
Keep-Alive: timeout=5
[{"id":1,"name":"John Doe","email":"johndoe@example.com"}]
Embora, a resposta acima esteja retorno o conteúdo esperado, existem algumas padronizações que devem ser seguidas ao criar uma API, sendo uma delas a utilização de Cabeçalhos HTTP. Seguindo o exemplo acima, um cabeçalho importante de especificar é Content-Type
para definir o conteúdo da resposta como JSON.
if (method === 'GET' && url === '/users') {
return response
.setHeader('Content-type', 'application/json')
.end(JSON.stringify(users))
}
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 58
Content-type: application/json
Date: Sat, 27 Apr 2024 02:23:08 GMT
Keep-Alive: timeout=5
[
{
"email": "johndoe@example.com",
"id": 1,
"name": "John Doe"
}
]
Como pode-se notar, definir cabeçalhos apropriados é importante para garantir que as requisições e respostas sejam interpretadas corretamente pelos clientes e servidores HTTP. Os cabeçalhos podem conter uma variedade de informações, como o tipo de conteúdo, codificação, autenticação, cache, entre outros, e são essenciais para a comunicação eficaz entre clientes e servidores na web.