Skip to content

Instantly share code, notes, and snippets.

@andrealmar
Last active October 21, 2023 05:00
Show Gist options
  • Save andrealmar/a3fd4392cba09107f021a04d8f9144e5 to your computer and use it in GitHub Desktop.
Save andrealmar/a3fd4392cba09107f021a04d8f9144e5 to your computer and use it in GitHub Desktop.

Olá,

Queremos te conhecer melhor e para isso te convidamos a realizar o seguinte teste técnico:

Você acabou de começar um novo desafio como Desenvolvedor PHP na empresa Contact List LTDA. E a sua primeira tarefa será desenvolver uma API para gerenciar uma Lista de Contatos.

Os requisitos para a construção desta API são:

  • Usar o paradigma REST (Representational State Transfer)

  • A stack que esta API terá que ser desenvolvida é:

Linguagem: PHP

Framework: Laravel

  • As seguintes rotas deverão ser criadas:
/contato (GET) -> Retorna todos os contatos da lista de contatos
/contato/{id} (GET) -> Retorna um único contato
/contato/{id} (POST) -> Cria um novo contato
/contato/{ID} (DELETE) -> Apaga um contato

Exemplos:

http://URL:PORT/contato (GET) deve retornar:

[
  {
    "id": "1",
    "firstname": "João",
    "lastname": "Silva",
    "address": {
      "city": "São Paulo",
      "state": "SP"
    }
  },
  {
    "id": "2",
    "firstname": "Maria",
    "lastname": "Pereira",
    "address": {
      "city": "Belo Horizonte",
      "state": "MG"
    }
  }
]

http://URL:PORT/contato/1 (GET) deve retornar:

[
  {
    "id": "1",
    "firstname": "João",
    "lastname": "Silva",
    "address": {
      "city": "São Paulo",
      "state": "SP"
    }
  }
]

Bem fácil né? Mas existe um outro cenário...já se passaram alguns anos depois que você criou a API acima. Os tempos mudaram e há a necessidade de construção de uma nova versão desta API.

A versão "v2" desta nova API deverá ser feita utilizando GraphQL(https://graphql.org/). Nunca ouviu falar? Aqui tem um tutorial legal: https://graphql.org/learn/

Seu trabalho agora é construir a MESMA API que você construiu anteriormente com REST, porém agora utilizando o paradigma GraphQL.

Só para não deixar dúvidas, os entregáveis do teste técnico serão:

  • versão "v1" da API utilizando REST
  • versão "v2" da API utilizando GraphQL

Crie um repositório DE PREFERÊNCIA privado no GitHub ou GitLab e nos de acesso a ele para que possamos ver o seu código.

Bônus points:

  • Testes unitários
  • Dockerizar a aplicação
  • Fazer o deploy da aplicação em containers Docker utilizando algum IaaS ou PaaS de sua escolha (Amazon AWS, Google Cloud, Digital Ocean, etc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment