Infraestrutura
Rede de computadores
Conteúdos
Páginas, apps
Internet
Web
Diferença
Cliente
Servidor
Arquitetura
Requisição
Resposta
GET
POST
PUT/PATCH
DELETE
1xx
2xx
3xx
4xx
5xx
HTML
CSS
JavaScript
Vue.js
React.js
TailwindCSS
PostgreSQL
MongoDB
Sinatra.rb
Python com Django
Node.js
Express
Servidor clássico
página HTML
Requisições recebiam documentos HTML como resposta
Realidade: clientes sempre eram browsers
views
erb / haml
%section.container
%h1= post.title
%h2= post.subtitle
.content
= post.content
Servidor moderno
dados serializados
documento JSON
Requisições recebem os dados em um documentos JSON como resposta
Realidade: diversidade de clientes (browser, apps, outros backends)
{
"post": {
"title": "Some title",
"subtitle": "Some subtitle",
"content": "Lorem ipsum dolor amet."
}
}
REpresentational State Transfer
Roy Fielding
sugestão de uso para os verbos de HTTP para ser mais semântico
GET domain.com/users
DELETE domain.com/users/42
POST domain.com/users --data { name: 'João' }
Roteamento
GET domain.com/users
DELETE domain.com/users/42
POST domain.com/users --data { name: 'João' }
Acessar a lista de todos os usuários cadastrados na plataforma
Criar um novo usuário na plataforma, com os dados informados
Remover da plataforma o usuário especificado
Descreva seus dados
Solicite o que deseja
Receba resultados previsíveis
type Project {
name: String
tagline: String
contributors: [User]
}
query {
project(name: "GraphQL") {
tagline
}
}
{
project: {
tagline: "A query language"
}
}
Alternativa ao REST
type User { name: String email: String photo: String projects: [Project] } type Project {
name: String
area: String
contributors: [User]
}
query {
getUser(name: "João") {
name
projects {
name
area
}
}
}
{
user: {
name: "João",
email: "joao@mail.com",
projects: [
{
name: "USPCodeLab",
area: "Technology",
}, {
name: "Byron",
area: "Technology",
}
]
}
}
Boa alternativa ao REST
V for View
geração das visualizações e exibições
(front-end)
C for Controller
conexão entre camadas M e V e porta de entrada das requisições
(lógica de negócio)
M for Model
abstração da camada de persistência
(banco de dados)
V for View
C for Controller
M for Model
Monolito
Microsserviços
Codebase e Times de desenvolvimento
Escalabilidade