Fractal 문서 (dingo 의 transformer 를 보고)

3577 단어
프 랙 탈 이 뭐야?
Fractal 은 복잡 한 데이터 출력 에 스타일 과 전환 층 을 제공 합 니 다.
보통 API 를 할 때 데이터베이스 에서 데 이 터 를 꺼 내 서 json 으로 클 라 이언 트 에 게 전달 합 니 다. 중요 하지 않 은 api 에 대해 서 는 이렇게 할 수 있 지만 공공 이나 모 바 일 프로그램 에 주면 불필요 한 데이터 나 형식 이 다른 데이터 출력 이 발생 합 니 다.
목표.
  • 원본 데이터 와 출력 데이터 사이 에 벽 ('barrier') 을 만 들 면 내부 구조 가 바 뀌 어도 사용자 에 게 영향 을 주지 않 습 니 다.
  • 조리 있 는 데이터 형식 전환
  • 데이터 의 내장 의존 도 를 포함 합 니 다
  • 표준 HAL 과 JSON - API 형식 을 사용 하고 사용자 정의 연결 허용
  • 데이터 페이지 지원
  • 복잡 한 데 이 터 를 정규 API
  • 에 교묘 하 게 출력 한다.
    간단 한 예
    이 열 은 아래 의 물건 을 함께 놓 는 것 이다. 현실 개발 에서 우 리 는 Manage 초기 화, 데이터 집합, json 전환 을 프로젝트 에 개방 할 것 이다.
    class UsersController extends BaseController
    {
        public function index()
        {
            $fractal = new FractalManager();
    
            $books = [
                [
                    'id' => '1',
                    'title' => 'Hogfather',
                    'yr' => '1998',
                    'author_name' => 'Philip K Dick',
                    'author_email' => '[email protected]',
                ],
                [
                    'id' => '2',
                    'title' => 'Game Of Kill Everyone',
                    'yr' => '2014',
                    'author_name' => 'George R. R. Satan',
                    'author_email' => '[email protected]',
                ]
            ];
    
            $resource = new FractalCollection($books, function(array $book) {
                return [
                    'id'      => (int) $book['id'],
                    'title'   => $book['title'],
                    'year'    => (int) $book['yr'],
                    'author'  => [
                        'name'  => $book['author_name'],
                        'email' => $book['author_email'],
                    ],
                    'links'   => [
                        [
                            'rel' => 'self',
                            'uri' => '/books/'.$book['id'],
                        ]
                    ]
                ];
            });
    
            $array = $fractal->createData($resource)->toArray();
            
            dd($array);
    

    cursor: 페이지 에 사 용 된 것 은 데이터베이스 에 몇 개의 데이터 가 있 는 지 계산 하지 않 습 니 다. 요청 을 통 해 다음 페이지 가 있 는 지 계속 확인 하고 cursor 를 통 해 이 표 시 를 합 니 다. 없 으 면 404 로 돌아 갑 니 다. 페이지 가 끝 났 음 을 의미 합 니 다.
    Include: 데 이 터 는 일반적으로 관련 이 있 습 니 다. 예 를 들 어 사용자 가 댓 글 이 있 고 댓 글 이 댓 글 이 있 으 며 댓 글 은 댓 글 에 속 합 니 다. restful apis 에서 데이터 관련 은 모두 포 함 됩 니 다. 예 를 들 어 사용자 의 댓 글 은 사용자 include post () 함 수 를 통 해 사용자 에 게 돌아 갈 때 해당 사용자 와 관련 된 게시 물 을 포함 할 수 있 습 니 다.
    Manager Fractal 에는 Manager 라 는 종류 가 있 는데 주로 데 이 터 를 어떤 형식 으로 포맷 해 야 하 는 지, json, Yaml 등 을 관리 합 니 다.
    Pagination Pagination Pagination is the process of dividing content into pages, which in relation to Fractal is done in two alternative ways: Cursors and Paginators.
    페이지 를 처리 하 는 데 사용 되 는 아주 멋 진 Paginator 는 데이터베이스 에 몇 개의 데이터 가 있 는 지 계산 하고 meta 에 'paginator' 를 추가 하 며 적당 할 때 next / previous 를 포함 합 니 다.
    resource 는 대상 입 니 다. 어떤 기본 데 이 터 를 포함 하 는 지 transformer 를 첨부 합 니 다. 최종 적 으로 직렬 화 되 고 출력 됩 니 다.
    Serializer 는 Transformer 의 종 류 를 규정된 형식 에 따라 직렬 화 합 니 다. 일반적으로 가장 많이 사용 되 는 형식 은 json 과 HAL 입 니 다. 예 를 들 어 트 위 터, 페 이 스 북, 구 글 은 데이터 전송 에 관 한 사용자 정의 형식 을 가지 고 있 습 니 다.
    transformer 는 하나의 클래스 일 수도 있 고 익명 함수 일 수도 있 습 니 다. 데 이 터 를 처리 하여 원 하 는 데이터 가 되 고 직렬 화 될 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기