본문 바로가기
CMS

strapi API Customizing

by NOMADFISH 2020. 12. 15.

REST API를 Customizing

 

  • 앞의 내용을 str api에서 제공해주는 Admin Dashboard를 이용하여, CRUD가 가능한 DB와 그 DB 모양과 역시 CRUD를 그대로 가능한 Rest API를 만들어 낼 수 있었다.
  • 그런데, 아주 기본적인 내용으로 이런 저런 기능을 만들어 낼 수 있게 된후 문득 드는 생각이, 앞에서 Task라는 Collection을 만들 었는데, update_by 항목은 GET api의 Response로 오는 json에서 빼고 싶다. 혹은 다른 내용을 내가 계산해서 더 넣어 주고 싶다 와 같은
  • 물론 update_by 항목을 빼거나 혹은 필요한 항목만 가져오고 싶은 경우 strapi가 GraphQL을 지원하니 그걸 client에서 사용해도 상관은 없겟지만, 일단 어떤 방식으로 API를 customizing 할 수 있는 알려 주기 위한 예시로만 생각해 주시기 바란다.
  • 기본적으로 strapi는 전체 코드를 다운 받아서 실행 시켯다.
  • 그렇다면 strapi 코드를 고치면 가능 하지 않을까?

STRAPI Handler

  • strapi code 구조를 살펴 보자, 지금 앞의 내용에서 Task, Subtask 라는 2개의 Collection을 만들었다.
  • strapi code를 보면, api/[collection] 과 같은 형태로 폴더가 생성됨을 알 수 있다.
  • [collection name]/
    • config: api의 router(PATH) 설정 
    • controllers: API handler, API들의 Input, output을 조작 할 수 있는 Handler
    • models: Collection(DB) 스키마
    • services : cotroller와 거의 비슷하다, 나중에 따로 설명하도록 한다.

  • confrollers를 보면 [collection].js 라는 파일이 존재 할 것이다. 실재 내부는 처음에 그냥 텅 비어 있다.
  • module.exports 의 {} 내부에 필요한 함수와 코드를 넣으면, 각 API가 호출 될때 마다, 원래 strapi 기능이 아닌 이곳의 code가 호출 될 것이다.
'use strict';

/**
 * Read the documentation (https://strapi.io/documentation/v3.x/concepts/services.html#core-services)
 * to customize this service
 */

module.exports = {};
  • 아래 예시를 보자
  • find 라는 함수를 이제 오버라이딩 한다. 
  • find는 기본적으로 GET 함수가 호출 되는 경우 불리는 함수이다.
module.exports = {
  async find(ctx) {
    let entities;
   
    if (ctx.query._q) {
      entities = await strapi.services['task'].search(ctx.query);
    } else {
      entities = await strapi.services['task'].find(ctx.query);
    }
    
     return entities.map(entity => {
      const item = sanitizeEntity(entity, {
        model: strapi.models['task'],
      })
  },
  • 위코드는 앞에서 생성한 task collection을 이용한 것이다.
  • /api/task/controllers/task.js 코드를 위와 같이 수정하면, http://localhost:1377/task/1 와 같이 task GET api는 모두, 위에 만들어진 함수를 호출하게 된다.

다음내용에서는 함수를 정의하기 위한 자세한 방법과, 각 변수등이 의미하는 것이 무엇인지 설명하겠다.

'CMS' 카테고리의 다른 글

str api 에 대하여 (2)  (1) 2020.12.26
strapi relation type 생성과 사용  (1) 2020.12.04
strapi Collection 생성과 사용  (0) 2020.12.03
strapi collection type 상세  (2) 2020.10.17
strapi collection type추가  (0) 2020.10.12