서비스 요청 PHP + API Rest + GraphQL

문맥화:



Vamos construir um servidor GraphQL + RestFull escrito em ApiPlatform, este projeto irá te ajudar a entender um sobre a facilidade de construir uma API Rest e GraphQL mesmo projeto.

Para este tutorial eu desenvolvi uma lista de itens a serem pagos para um planejamento de casamento.

A ideia deste projeto é bem simples casal tem 0::N eventos cada evento tem um nome e valor.

Bom, chega de conversa e vamos para o código:

전제 조건:


  • 도커 + 도커 작성
  • PHP 8.1
  • 작곡가

  • 설치:



    Abra um terminal e crie um diretório onde você deseja que seu código fique em seu computador.

    $ cd ~/
    $ mkdir wedding
    $ cd wedding
    


    Com isso seu projeto Symfony será criado, execute passo a passo.

    $ composer create-project symfony/skeleton:"6.1.*" .
    $ composer req orm # y para criar o docker-compose.yml
    $ composer req api
    $ composer require webonyx/graphql-php
    


    Suba seu container com banco de dados configurado

    $ docker-compose up -d
    


    Agora vamos criar nossas entidades, mas antes precisamos criar uma dependsência de desenvolvimento

    $ composer require --dev symfony/maker-bundle
    


    엔티다이드 Couple , em seu 터미널 숫자:

    $ php bin/console make:entity Couple
    manName: <string:255> not null
    womanName: <string:255> not null
    


    Siga com os nomes como no print:

    엔티다이드 Event , em seu 터미널 숫자:

    $ php bin/console make:entity Event
    name: <string:255> not null
    price: <float> not null
    


    Vamos voltar para a criação de entidade, mas vamos só criar uma relação 0::N de Couple com Events

    $ php bin/console make:entity Couple
    




    No mapeamento da classe Event você precisará ajustar na mão o relacionamento, deve ficar assim:

    
    #src/Entity/Event.php
    class Event
    {
        ...
        #[ORM\ManyToOne(targetEntity: Couple::class)]
        #[ORM\JoinColumn(name: "couple_id", referencedColumnName: "id", nullable: true)]
        private $couple;
        ...
    }
    


    Vamos gerar nossa migrações, no seu e subir a estrutura de SQL.

    $ php bin/console make:migration
    $ php bin/console doctrine:migration:migrate
    


    프레시오네 yes para apagar todos os dados do banco de app

    구성



    Vamos partir de agora mexer somente nas entidades.

    1.) 클래스 src/Entity/Event.php에서 ApiResource 속성 가져오기

    namespace App\Entity;
    
    use ApiPlatform\Core\Annotation\ApiResource;
    use App\Repository\EventRepository;
    use Doctrine\ORM\Mapping as ORM;
    
    #[ORM\Entity(repositoryClass: EventRepository::class)]
    #[ApiResource]
    class Event
    {
            ...
            #[ORM\ManyToOne(targetEntity: Couple::class)]
        #[ORM\JoinColumn(name: "couple_id", referencedColumnName: "id", nullable: true)]
        #[ApiSubresource]
        private $couple;
            ...
    


    2.) 클래스 src/Entity/Couple.php에서 ApiResource 속성 가져오기

    namespace App\Entity;
    
    use ApiPlatform\Core\Annotation\ApiResource;
    use App\Repository\CoupleRepository;
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;
    use Doctrine\ORM\Mapping as ORM;
    
    #[ORM\Entity(repositoryClass: CoupleRepository::class)]
    #[ApiResource]
    class Couple
    ...
    


    실행하다:



    Rode seu servidor local php para ter acesso ao localhost

    액세스: http://localhost:7777/api - Swagger 문서 RESTAPI

    액세스: http://localhost:7777/api/graphql - 놀이터 GraphQL

    Veja algumas는 GraphQL에서 você pode fazer를 쿼리합니다.

    Para criar um novo casal faça isso:

    mutation CretateCouple($couple: createCoupleInput! ) {
      createCouple(input: $couple) {
        couple {
          manName
          womanName
        }
      }
    }
    #query variables
    {
      "couple":{
        "manName": "joe",
        "womanName": "mary"
      }
    }
    
    


    Para buscar todos:

    query {
      couples {
        edges {
          node {
            manName
            womanName
          }
        }
      }
    }
    


    결론



    Espero que tenham gostado fiz um exemplo bem simples para ajudar a entender mais sobre essas ferramentas tão maravilhosas que nem semper temos contato.

    참조:



    Symfony
    ApiPlatform
    Symfony Maker

    좋은 웹페이지 즐겨찾기