http://localhost:5000/api
Content-Type: application/json
Authorization: Bearer <token> (para endpoints protegidos)
POST /auth/registerRequest:
{
"username": "usuario123",
"email": "usuario@email.com",
"password": "senha123",
"fullName": "Usuário Teste"
}Response (201):
{
"message": "Usuário registrado com sucesso",
"user": {
"id": 1,
"username": "usuario123",
"email": "usuario@email.com",
"full_name": "Usuário Teste"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}POST /auth/loginRequest:
{
"email": "usuario@email.com",
"password": "senha123"
}Response (200):
{
"message": "Login realizado com sucesso",
"user": {
"id": 1,
"username": "usuario123",
"email": "usuario@email.com",
"full_name": "Usuário Teste",
"profile_picture": null
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}GET /auth/profile
Authorization: Bearer <token>Response (200):
{
"id": 1,
"username": "usuario123",
"email": "usuario@email.com",
"full_name": "Usuário Teste",
"bio": "Descrição do perfil",
"profile_picture": "url_foto",
"cover_picture": "url_capa",
"location": "São Paulo, Brasil",
"website": "www.website.com",
"followers_count": 100,
"following_count": 50,
"created_at": "2024-01-15T10:30:00Z"
}POST /tweets
Authorization: Bearer <token>Request:
{
"content": "Olá, este é meu primeiro tweet!",
"imageUrl": "https://example.com/image.jpg"
}Response (201):
{
"message": "Tweet criado com sucesso",
"tweet": {
"id": 42,
"content": "Olá, este é meu primeiro tweet!",
"image_url": "https://example.com/image.jpg",
"likes_count": 0,
"retweets_count": 0,
"replies_count": 0,
"created_at": "2024-01-20T15:30:00Z"
}
}GET /tweets/:tweetIdResponse (200):
{
"id": 42,
"content": "Olá, este é meu primeiro tweet!",
"image_url": "https://example.com/image.jpg",
"likes_count": 5,
"retweets_count": 2,
"replies_count": 1,
"created_at": "2024-01-20T15:30:00Z",
"user_id": 1,
"username": "usuario123",
"full_name": "Usuário Teste",
"profile_picture": "url_foto"
}GET /tweets/timeline?page=1&limit=20
Authorization: Bearer <token>Query Parameters:
page(opcional): Página dos resultados (padrão: 1)limit(opcional): Quantidade de tweets por página (padrão: 20)
Response (200):
{
"tweets": [
{
"id": 42,
"content": "Olá, este é meu primeiro tweet!",
"image_url": null,
"likes_count": 5,
"retweets_count": 2,
"replies_count": 1,
"created_at": "2024-01-20T15:30:00Z",
"user_id": 1,
"username": "usuario123",
"full_name": "Usuário Teste",
"profile_picture": "url_foto"
}
],
"page": 1,
"limit": 20
}DELETE /tweets/:tweetId
Authorization: Bearer <token>Response (200):
{
"message": "Tweet deletado com sucesso"
}POST /tweets/:tweetId/like
Authorization: Bearer <token>Response (200):
{
"message": "Tweet curtido",
"liked": true
}GET /users/search?q=usuarioQuery Parameters:
q(obrigatório): Termo de busca (mínimo 2 caracteres)
Response (200):
[
{
"id": 1,
"username": "usuario123",
"full_name": "Usuário Teste",
"profile_picture": "url_foto",
"bio": "Descrição"
}
]GET /users/:userIdResponse (200):
{
"id": 1,
"username": "usuario123",
"email": "usuario@email.com",
"full_name": "Usuário Teste",
"bio": "Descrição do perfil",
"profile_picture": "url_foto",
"cover_picture": "url_capa",
"location": "São Paulo, Brasil",
"website": "www.website.com",
"followers_count": 100,
"following_count": 50,
"created_at": "2024-01-15T10:30:00Z"
}PUT /users/profile
Authorization: Bearer <token>Request:
{
"fullName": "Novo Nome",
"bio": "Nova descrição",
"location": "Rio de Janeiro",
"website": "www.newsite.com",
"profilePicture": "url_nova_foto",
"coverPicture": "url_nova_capa"
}Response (200):
{
"message": "Perfil atualizado com sucesso",
"user": {
"id": 1,
"username": "usuario123",
"email": "usuario@email.com",
"full_name": "Novo Nome",
"bio": "Nova descrição",
"profile_picture": "url_nova_foto",
"cover_picture": "url_nova_capa",
"location": "Rio de Janeiro",
"website": "www.newsite.com"
}
}POST /users/:targetUserId/follow
Authorization: Bearer <token>Response (200):
{
"message": "Usuário seguido com sucesso",
"following": true
}GET /users/:userId/followers?page=1&limit=20Query Parameters:
page(opcional): Página dos resultados (padrão: 1)limit(opcional): Quantidade de seguidores por página (padrão: 20)
Response (200):
{
"followers": [
{
"id": 2,
"username": "seguidor1",
"full_name": "Seguidor Um",
"profile_picture": "url_foto",
"bio": "Bio do seguidor"
}
],
"page": 1,
"limit": 20
}| Código | Erro | Descrição |
|---|---|---|
| 400 | Bad Request | Requisição inválida ou parâmetros faltando |
| 401 | Unauthorized | Token inválido, expirado ou não fornecido |
| 403 | Forbidden | Acesso negado (ex: deletar tweet de outro usuário) |
| 404 | Not Found | Recurso não encontrado |
| 500 | Internal Server Error | Erro no servidor |
Login:
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@email.com",
"password": "senha123"
}'Criar Tweet:
curl -X POST http://localhost:5000/api/tweets \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"content": "Olá mundo!"
}'- Tweets limitados a 280 caracteres
- Máximo 20 tweets por página por padrão
- Máximo 20 seguidores por página por padrão
- Mínimo 2 caracteres para busca de usuários
Desenvolvido para fins educacionais 📚