TIL # 15 - REST API & GraphQL

μ •μŠΉμ˜₯(seungok)Β·2021λ…„ 5μ›” 21일
0

TIL

λͺ©λ‘ 보기
15/16
post-thumbnail

✍️ API 와 Server API

πŸ“Œ API
ν”„λ‘œκ·Έλž¨μ˜ λͺ…λ Ή λͺ©λ‘μ„ μ •λ¦¬ν•˜κ³  μ‘μš©ν”„λ‘œκ·Έλž¨κ³Ό μƒν˜Έμž‘μš©ν•˜μ—¬ λͺ…령에 λŒ€ν•œ 값을 μ „λ‹¬ν•œλ‹€.
πŸ“Œ Server API
μš”μ²­μ— λ§žλŠ” 응닡을 λ˜λŒλ €μ£ΌλŠ” EndPointλ₯Ό 웹을 톡해 λ…ΈμΆœμ‹œν‚¨ 것을 λ§ν•œλ‹€.
πŸ“Œ EndPoint
APIκ°€ μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 있게 ν•˜λŠ” URL이닀.

✍️ REST API μ΄ν•΄ν•˜κΈ°

1. REST 와 REST API

  • REpresentational State Transfer
    πŸ‘‰ λ¦¬μ†ŒμŠ€μ˜ ν‘œν˜„μ— λŒ€ν•œ μƒνƒœ 전달
  • λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό ν•˜λ‚˜μ˜ EndPoint둜 μ—°κ²°ν•˜κ³  λ¦¬μ†ŒμŠ€λ§ˆλ‹€ 각 EndPoint둜 κ΄€λ¦¬ν•˜λŠ” λ„€νŠΈμ›Œν¬ 기반 μ•„ν‚€ν…μ²˜λ₯Ό λ§ν•œλ‹€.
  • HTTP URI둜 λ¦¬μ†ŒμŠ€λ₯Ό λͺ…μ‹œν•˜κ³  HTTP METHODλ₯Ό 톡해 λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ CRUD Operation을 μ μš©ν•œ 것을 μ˜λ―Έν•œλ‹€.
    πŸ‘‰ URIλŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜κ³  λ‚˜νƒ€λ‚΄λŠ” μ£Όμ†Œλ₯Ό λ§ν•œλ‹€.
    πŸ‘‰ URIλŠ” URLκ³Ό URN을 ν¬ν•¨ν•œ κ°œλ…μ΄λ‹€.

2. μž₯점과 단점

βœ… μž₯점

  • μ˜λ„λ₯Ό λͺ…ν™•νžˆ νŒŒμ•…ν•  수 μžˆλ‹€.
  • HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 인프라λ₯Ό κ΅¬μΆ•ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • stateless νŠΉμ§•μ— 따라 μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈ λ¬Έλ§₯을 μœ μ§€ν•  ν•„μš”κ°€ μ—†μ–΄ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 뢄리됐닀.
    πŸ‘‰ μ—…λ¬΄λŸ‰ κ°μ†Œμ™€ HTTP ν‘œμ€€μ„ λ”°λ₯΄λŠ” λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ ν˜Έν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

⛔️ 단점

  • μ‚¬μš©ν•  수 μžˆλŠ” METHOD ν˜•νƒœκ°€ μ œν•œμ μ΄λ‹€.
  • ν‘œμ€€μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

✍️ GraphQL μ΄ν•΄ν•˜κΈ°

1. λ°°κ²½

  • νŽ˜μ΄μŠ€λΆμ—μ„œ κ°œλ°œν•œ Query Languageλ‹€.
    πŸ‘‰ Query LanguageλŠ” 정보λ₯Ό μ–»κΈ° μœ„ν•œ μ§ˆμ˜λ¬Έμ„ λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 컴퓨터 μ–Έμ–΄λ‹€.
  • REST API ν†΅μ‹ μ˜ ν•œκ³„λ‘œ 인해 νƒ„μƒν•˜κ²Œ 됐닀.
    πŸ‘‰ νŠΉμ • κΈ°λŠ₯, μš”μ²­μ— 따라 μ—¬λŸ¬λ²ˆ APIκ°€ ν˜ΈμΆœλ˜κ±°λ‚˜ μƒˆλ‘œμš΄ APIλ₯Ό λ§Œλ“€μ–΄μ•Όν•œλ‹€.
    πŸ‘‰ 관리해야할 EndPoint μ¦κ°€λ‘œ μΈν•œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

2. νŠΉμ§•

  • 단 ν•˜λ‚˜μ˜ EndPoint만 μ‘΄μž¬ν•˜μ—¬ ν•œλ²ˆμ˜ μš”μ²­μœΌλ‘œ λͺ¨λ“  정보λ₯Ό κ°€μ Έμ˜¨λ‹€.
  • Query문에 따라 λ‹€λ₯Έ 응닡ꡬ쑰λ₯Ό 가진닀.
  • Client-Side 와 Server-Side λͺ¨λ‘ 톡신을 μ£Όκ³  받을 수 μžˆλ‹€.

3. μž₯점과 단점

βœ… μž₯점

  • ν•˜λ‚˜μ˜ EndPoint만 가지기 λ•Œλ¬Έμ— μš”μ²­νšŸμˆ˜κ°€ 쀄어듀고 μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ‘Œλ‹€.
  • μ›ν•˜λŠ” μ •λ³΄λ§Œ μš”μ²­ν•˜μ—¬ Overfetching, Underfetching 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.
    πŸ‘‰ Overfetching : μ›ν•˜λŠ” 데이터 μ΄μƒμœΌλ‘œ λ°›λŠ” 것
    πŸ‘‰ Underfetching : μ›ν•˜λŠ” 데이터λ₯Ό μš”μ²­ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬λ²ˆ μš”μ²­ν•˜λŠ” 것

⛔️ 단점

  • HTTP의 캐싱 μ „λž΅μ€ 각각의 URL에 μ €λ§ˆλ‹€μ˜ 정책을 μ„€μ •ν•˜λŠ” ν˜•μ‹μœΌλ‘œ 이루어져 GraphQL νŠΉμ„±μƒ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.
    πŸ‘‰ GraphQL만의 캐싱 방식인 μ˜μ†μΏΌλ¦¬, μ•„ν΄λ‘œ 엔진 등이 μžˆλ‹€.
  • μ™„μ„±λœ λͺ…μ„Έκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
    πŸ‘‰ νŒŒμΌμ—…λ‘œλ“œλ₯Ό 직접 κ΅¬ν˜„ν•΄μ•Όν•œλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”ν•œ 데이터λ₯Ό κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ— 잘λͺ»λœ μš”μ²­μ„ ν•„ν„°λ§ν•˜κΈ° κΉŒλ‹€λ‘­λ‹€.
profile
Front-End Developer 😁

0개의 λŒ“κΈ€