Symfony4+api-platform에서 데이터를 저장할 때의 동작 맞춤설정

What is Symfony api-platform?



rest api를 Symfony4로 매우 간단하게 구현할 수 있는 번들입니다.
h tps // 아피-p t후 rm. 이 m

※ 인스톨 방법이나 기본적인 사용법은 기존의 기사가 있으므로 그쪽을 봐 주세요.
htps : // 코 m / ぺ y_s / ms / 9 세세 c252 바베 8057047
htps : // m / 화병 / ms / 2 또는 d91228b29f6f77317

Customize actions on data persist



단순히 데이터를 읽고 쓰는 것만으로는 기본 설정 그대로 @ApiResource 별 엔티티를 늘리는 것만으로 사용할 수 있습니다. 싶을 때라고 생각합니다.
예를 들면 데이터 보존과 동시에 메일 송신이나 Slack 투고등.

그러한 경우에 어떤 구현을 하면 좋은지 조사했다&실험해 보았습니다.

Create your own DataPersister


DataPersisterInterface 를 구현한 커스텀 클래스를 만드십시오.
  • supports($data)에서 사용자 지정 저장 작업을 수행하려는 대상 지원
  • persist($data)에 실제 저장 처리 쓰기
  • remove($data)에 실제 삭제 프로세스 작성

  • 샘플은 이쪽 htps : // 기주 b. 코 m / 77 ぇ b / 아피 ぁ t ぉ rm p ぁ yg 로운 d / b ぉ b / 아 1 아후 552 베 f5 28 b src / 페르시 s r / 보오 k 페르시 s r. php
    ※ 단순한 샘플이므로 TimestampableExtension으로 할 수 있는 것 밖에 하고 있지 않습니다만, 실제로는 여기에서 여러가지 처리를 더할 수가 있습니다.

    Define your DataPersister as Symfony service with api_platform.data_persister tag



    자작의 DataPersister를 api_platform.data_persister 태그를 붙여 서비스로서 정의합니다.

    샘플은 이쪽 htps : // 기주 b. 코 m / 77 ぇ b / 아피 ぁ t ぉ rm p ぁ yg 로우 d / b ぉ b / 아 1 아후 552 베 f5 28 b 콘후 g/세 r ゔ ぃ 세 s. 이나 ml#L29-L34

    이 상태에서 쓰기 API를 호출하면 DB에 데이터를 저장할 뿐 아니라 사용자 지정 처리를 수행할 수 있습니다.

    How does this work?



    (여기부터는 여담입니다.)
    api_platform.data_persister 태그를 붙이면, 자작의 DataPersister가 data_persister로서 인식되어 ChainDataPersister 클래스에 세트 됩니다.
    ※ 참고 Symfony의 DI 컨테이너에서 태그가 어떻게 사용되는지는 Symfony에서 동종의 클래스를 대량으로 사용할 때 DI로 즐기는 테크닉(자작 태그의 추천) 에 써 두었습니다

    저장 시 실제로 어떤 DataPersister를 사용하는지는 ChainDataPersister 클래스에 의해 전략 패턴을 사용해 결정되고 있습니다.

    단순히 api-platform을 사용하는 것뿐만 아니라, 구조에도 흥미가 있는 분은 봐 주세요(조건 분기 금지!)

    ※ 덧붙여서 어쨌든 공식 문서에 커스텀 DataPersister 이용에 대해서 기재가 보이지 않았기 때문에 소스 코드를 읽고 아타리를 붙여 실험으로 확인했습니다

    좋은 웹페이지 즐겨찾기