Services/Projects

Generic

Introdução

Um guia simples de uso da Project G API

Convenções

A URL base para enviar todas as requisições à API é https://projectg2.vercel.app/api/. É necessário o uso de HTTPS para todas as requisições à API.

A API do Projeto G segue convenções RESTful sempre que possível, com a maioria das operações realizadas por meio de requisições GET, POST, PATCH e DELETE em recursos de página e banco de dados. Os corpos de requisição e resposta são codificados em JSON.

Convenções JSON

Code samples & SDKs

Todos recursos e código fonte então disponíveis no repositório WEB

Destacando se:

Pasta API

Paginação

Endpoints que retornam listas de objetos suportam solicitações de paginação baseadas no seu scroll ou posição na página. Por padrão, é retornado 3 itens por chamada de API. Se o número de itens em uma resposta de um endpoint de suporte exceder o padrão, então uma integração pode usar a paginação para solicitar um conjunto específico de resultados e/ou limitar o número de itens retornados.

SUPPORTED ENDPOINTS

Método HTTP Endpoint
GET services/posts/?page
GET services/projects/:page/

Limite de Requisições

Rate Limits

Caso um usuário ultrapasse o limite de requisições será retornado o código de erro: "rate_limited" (HTTP status 429). O limite atual é de em média 100 requisições por minuto.

<aside> ❗ A taxa de requisições por minuto e sua implementação provavelmente será modificada no futuro.

</aside>

Status Codes

Respostas HTTP.

Código de sucesso

HTTP Status Description
200 Successfully processed request.

Códigos de erro

Tabela de erros com seus com seus respectivos status HTTP, códigos e dados retornados

HTTP Status code data
400 invalid_json O corpo da requisições não pode ser transformado em JSON
500 Internal_server_error Erro interno de servidor
400 invalid_request Requisição inválida, ou falta de parâmetros obrigatórios.
401 unauthorized O token de validação está incorreto, ou o usuário não tá autorização de acesso.
429 rate_limited Limite de requisições por minuto ultrapassado

Objetos

Services/Posts (OBS: desenvolvido antes da adoção da arquitetura REST)

Trabalha com os posts de usuários

Get

Parâmetros:

Exemplos:

Response:

Um array de posts, cada um contendo as seguintes propriedades:

Exemplo em modelo prisma:

	id        String   @id @default(cuid())
  content   String?
  images    String[]
  published Boolean  @default(false)

  tags String[]

  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt

  likes Like[] @relation("LikedPost")
  pins  Pin[]  @relation("PinnedPost")

  author      User?     @relation("PostAuthor", fields: [authorId], references: [id], onDelete: Cascade)
  authorId    String?
  contributor User[]    @relation("PostContributor")
  comments    Comment[] @relation("CommentedPost")

Exemplo resposta em JSON:

[
	{
	   "id": "clpn00ii40001civh5f1j9ykg",
	   "content": "testye2" ,
		 "images": ["posts/imagem1.png", "posts/image2.jpg"]
	   "likes": [
	       ...
	   ],
	   ...
  },
  {
	   "id": "I'm a cuid",
	   ...
   },
]

Delete

DELETE /api/services/posts

Parâmetros:

Exemplos:

Post

POST /api/services/posts

Parâmetros:

Examples:

Services/User

Get

GET /api/services/users

Parâmetros:

Exemplos:

Response:

Em caso de GET sem parâmetro especial (Only), é retornado uma array de usuários. Ao contrário do Uso do Only, que retorna apenas um usuário de a cordo com o Id.

Alguns dos parâmetros JSON retornados são privados, ou seja, só são retornados quando necessários.

Exemplo em modelo prisma:

	id       String  @id @default(cuid())
  name     String
  password String?
  image    String?

  followers Follows[] @relation("Follower")
  following Follows[] @relation("Following")

  likes Like[] @relation("LikedBy")
  pins  Pin[]  @relation("PinnedBy")

  title       String?
  description String?
  location    String?
  graduations String[]

  linkedinUrl  String?
  CREA         String? @unique
  siteUrl      String?
  contactPhone Int?
  profilePic   String?

  email         String    @unique
  emailVerified DateTime?

  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt

  position Positions @default(DefaultUser)

  accounts Account[]
  sessions Session[]

  authoredPosts    Post[] @relation("PostAuthor")
  contributedPosts Post[] @relation("PostContributor")

  authoredProjects    Project[] @relation("ProjectAuthor")
  contributedProjects Project[] @relation("ProjectContributor")

  authoredComments Comment[] @relation("CommentAuthor")

Exemplo resposta em JSON:

[
	{
	   "id": "clpn00ii40001civh5f1j9ykg" ,
	   "name": "GuizinhoLindo" ,
	   "password": "SawddsSW231455123SGWESAf2" (Private) , 
	   ...
  },
  {
	   "id": "I'm a cuid",
	   ...
   },
]

Patch

PATCH /api/services/users

Parâmetros:

Examples:

Services/Projects

Get

GET /api/services/projects

Parâmetros:

Examples:

Response: