[api] Rest & GraphQL

ShinJuYong·2022년 7월 18일
0

기술면접

목록 보기
3/4

API?

  • 입력과 출력 -> 함수와 비슷하다
  • 규격에 맞는 입력이 주어진다면 규격에 알맞은 출력값을 뽑아주는것
    • 만약 값이 다르다면 값이 다르단것을 알려줘서 에러상황임을 인지시켜준다.

Rest?

HTTP URI를통해 명시하며 HTTP Method를 사용하여 행위를 정하는것

  • HTTP표준만 있다면 어떤 기술이든지 사용이 가능하다
  • 클라이언트 - 서버의 구조를 가지고 있따.
  • 서버는 클라이언트의 상황을 고려하지 않고 구현이 가능하다
  • URI와 Method자체가 의미가 존재한다
  • 클라이언트는 최상위라 계층이 불가능하지만 서버는 로드밸런싱,암호화 및 프록시등 중간 경유를 자유롭게 사용이 가능하다.

What is RESTful?

  • uri는 리소스를 표현해야한다
    • 절대로 행위에대한 글자가 들어가면 안된다.
    • 리소스명은 명사를 사용하며 대문자를 쓰지 않는다.
  • 행위는 Http Method를 통해 표현한다
    • GET은 조회
    • POST는 생성
    • PUT,PATCH는 업데이트
    • DELETE는 삭제
  • 요청에대한 응답의 상태코드가 명확해야한다.
    • 2xx : 200,201등 성공에대한 응답
    • 3xx : 리다이렉션 (성공했지만 추가적인 작업이 필요한 경우)
    • 4xx : 클라이언트측 에러
    • 5xx : 서버측 에러

왜 grpahql이 만들어졋는가

  • 끝없는 엔드포인트
    • 서비스가 커질수록 엔드포인트가 늘어나며 감당이 힘들어진다
    • 엔드포인트 변경시 프론트, 백 둘다 수정이 필요함
  • api docs의 명세 관리가 어렵다
  • over-fetching ( 불필요한 정보까지 받는 문제)
  • under-ferching ( 요청 한것의 정보를 받기위한 요청 )

장점

  • 수많은 엔드포인트들을 한개로 사용이 가능하다
  • 두개로 통합된 method로 관리한다
    • GET은 Query
    • POST,PUT,DELETE 등 데이터의 변화가 일어난다면 Mutation을 사용한디.
  • 자체적인 api docs를 지원하는 apollo server
    • GraphQL은 Apollo Client / Server를 사용하여 API를 통신하며 api에대한 명세를 자동으로 갱신하며 자체적인 테스팅툴로 api를 테스트가 가능하다
  • 원하는 데이터만 골라 받아올 수 잇어 Over-Fetching에서 자유롭다

단점

  • http 캐싱이 불가능하다
  • 기존 REST API에서도 간단한 쿼리 및 스키마 정의가 가능하여 굳이 쓸필요 까지는 없다
    • 하지만 모든 기능을 통일된 방식으로 사용한 GraphQL이 있어 두개의 장단점을 생각해 만드는것이 좋다.

0개의 댓글