[πŸ₯ λ„€νŠΈμ›Œν¬] Rest API

dsfasdΒ·2022λ…„ 10μ›” 7일
0

λ„€νŠΈμ›Œν¬

λͺ©λ‘ 보기
1/4

[API κ΄€λ ¨ κΈ€]
https://velog.io/@bommy5799/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-APIAplication-Programing-Interface


Rest API

  • restλΌλŠ” ν˜•μ‹μ˜ API둜, μ„œλΉ„μŠ€μ œμž‘μ—μ„œ 널리 μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆλ‹€.
    μ΄λŠ” 과거의 λ³΅μž‘ν•œ ν˜•μ‹μΈ SOAP을 λŒ€μ²΄ν•œλ‹€.
  • REST APIλŠ” μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ μžμ›(Resource)을 HTTP URI둜 ν‘œν˜„ν•˜κ³ , HTTP ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ •μ˜ν•˜λŠ” 방식
  • RESTλŠ” HTTPλ₯Ό 잘 ν™œμš©ν•˜κΈ° μœ„ν•œ 원칙이라고 ν•  수 있고 REST APIλŠ” 이 원칙을 μ€€μˆ˜ν•΄ λ§Œλ“  API이닀.
    (❗️ ν•˜μ§€λ§Œ μ‹€λ¬΄μ—μ„œ restAPIλ₯Ό μœ„ν•œ κ·œμΉ™μ„ λ§Œμ‘±ν•˜λ©΄μ„œ μ‚¬μš©ν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯에 κ°€κΉŒμš°λ―€λ‘œ HTTP API와 rest APIλŠ” μ‹€μ œλ‘œ 거의 λ™μΌν•œ 의미둜 μ‚¬μš©λœλ‹€κ³  보면 λœλ‹€. )

  • rest APIλŠ” μš”μ²­μ„ λ³΄λ‚΄λŠ” μ£Όμ†Œ μžμ²΄λ‘œλ„ μ–΄λ–€ μš”μ²­μΈμ§€ μœ μΆ”κ°€ κ°€λŠ₯ν•˜λ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.
    μžμ›μ„ ꡬ쑰와 ν•¨κ»˜ λ‚˜νƒ€λ‚΄λŠ” URIλΌλŠ” κ΅¬λΆ„μžλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ 톡신을 ν•  λ•Œ μ§€μΌœμ•Ό ν•  κ·œμ•½μ„ ν”„λ‘œν† μ½œμ΄λΌκ³  ν•˜κ³ , λŒ€ν‘œμ μœΌλ‘œ HTTP ν”„λ‘œν† μ½œμ΄ μžˆλ‹€.


HTTP μš”μ²­ λ©”μ„œλ“œ

rest APIμ—μ„œλŠ” HTTPμ—μ„œ μš”μ²­μ„ λ³΄λ‚Όλ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

GET- 데이터λ₯Ό read, μ‘°νšŒν•˜λŠ”λ° μ‚¬μš©
POST - [body], create μƒˆλ‘œμš΄ 정보λ₯Ό μΆ”κ°€ν•˜λŠ”λ° μ‚¬μš©
DELETE - 데이터 μ‚­μ œμ‹œ μ‚¬μš©
PUT - [body], 정보λ₯Ό ν†΅μ§Έλ‘œ κ°ˆμ•„λΌμšΈλ•Œ μ‚¬μš©
PATCH - [body], 정보 쀑 일뢀λ₯Ό νŠΉμ • λ°©μ‹μœΌλ‘œ λ³€κ²½ν•  λ•Œ μ‚¬μš©

  • 각각의 λ©”μ„œλ“œλ“€μ€ μš©λ„κ°€ λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„λ˜μ–΄ μžˆμ§€ μ•Šμ§€λ§Œ, λˆ„κ΅¬λ“  μš”μ²­μ˜ μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이듀을 λͺ©μ μ— 따라 κ΅¬λΆ„ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

  • rest의 κ·œμΉ™ 쀑 ν•˜λ‚˜λ‘œ URIλŠ” 동사가 μ•„λ‹Œ λͺ…μ‚¬λ‘œ 이뀄져야 ν•œλ‹€.

  • restλŠ” ν˜•μ‹μ΄λ―€λ‘œ κΈ°μˆ μ— ꡬ애받지 μ•ŠλŠ”λ‹€.


REST APIλ₯Ό λ””μžμΈν•˜λŠ” 방법

둜이 필딩이 λ…Όλ¬Έμ—μ„œ μ œμ‹œν•œ REST 방법둠을 보닀 더 μ‹€μš©μ μœΌλ‘œ μ μš©ν•˜κΈ° μœ„ν•΄ λ ˆμ˜€λ‚˜λ₯΄λ“œ λ¦¬μ°¨λ“œμŠ¨(Leonard Richardson)은 REST APIλ₯Ό 잘 μ μš©ν•˜κΈ° μœ„ν•œ 4단계 λͺ¨λΈμ„ μ œμž‘ν•˜μ˜€λ‹€.

  • REST μ„±μˆ™λ„ λͺ¨λΈμ€ 총 4단계(0~3단계)둜 λ‚˜λˆ„μ–΄μ§„λ‹€.
  • μ—„λ°€ν•˜κ²Œ 3λ‹¨κ³„κΉŒμ§€ 지킀기 μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 2λ‹¨κ³„κΉŒμ§€λ§Œ μ μš©ν•΄λ„ 쒋은 API λ””μžμΈμ΄λΌκ³  λ³Ό 수 있고, 이런 경우λ₯Ό HTTP API 라고도 λΆ€λ₯Έλ‹€.

(1) REST μ„±μˆ™λ„ λͺ¨λΈ - 0단계

βœ… λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κΈ°λ§Œ ν•˜λŠ” 경우

μ΄λŠ” REST APIλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ 단계이닀.

(2) REST μ„±μˆ™λ„ λͺ¨λΈ - 1단계

βœ… κ°œλ³„ λ¦¬μ†ŒμŠ€(Resource)μ™€μ˜ 톡신을 μ€€μˆ˜

λͺ¨λ“  μžμ›μ€ κ°œλ³„ λ¦¬μ†ŒμŠ€μ— λ§žλŠ” μ—”λ“œν¬μΈνŠΈ(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λ©° μš”μ²­ν•˜κ³  λ°›λŠ” μžμ›μ— λŒ€ν•œ 정보λ₯Ό μ‘λ‹΅μœΌλ‘œ 전달해야 ν•œλ‹€.
μš”μ²­μ— λ”°λ₯Έ μ‘λ‹΅μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό 전달할 λ•Œμ—λ„ μ‚¬μš©ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 정보와 ν•¨κ»˜ λ¦¬μ†ŒμŠ€ μ‚¬μš©μ— λŒ€ν•œ 성곡/μ‹€νŒ¨ μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•΄μ•Όν•œλ‹€.

  • 동사, HTTP λ©”μ„œλ“œ, ν˜Ήμ€ μ–΄λ–€ ν–‰μœ„μ— λŒ€ν•œ 단어 μ‚¬μš©μ€ 지양

  • λ¦¬μ†ŒμŠ€μ— 집쀑해 λͺ…사 ν˜•νƒœμ˜ λ‹¨μ–΄λ‘œ μž‘μ„±ν•˜λŠ” 것이 λ°”λžŒμ§

(3) REST μ„±μˆ™λ„ λͺ¨λΈ - 2단계

βœ… CRUD에 맞게 μ μ ˆν•œ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것

REST μ„±μˆ™λ„ λͺ¨λΈμ˜ 2λ‹¨κ³„κΉŒμ§€ μ μš©ν•˜λ©΄ λŒ€μ²΄μ μœΌλ‘œ 잘 μž‘μ„±λœ API둜 κ°„μ£Όν•œλ‹€.

CRUDλŠ” Create, Read, Update ,Deleteλ₯Ό 의미

(1) GET λ©”μ„œλ“œλ₯Ό 톡해 쑰회 :

μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ— λŒ€ν•΄ ꡬ체적인 query parameter(slots?date=2022-08-10)λ₯Ό
μ „λ‹¬ν•˜μ—¬ 데이터λ₯Ό 확인(Read) 

(2) POST λ©”μ„œλ“œλ‘œ μš”μ²­, νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½ν•˜κΈ° :

patientλ₯Ό μ˜¬λ°”λ₯΄κ²Œ Createν•˜μ˜€μŒμ„ 확인 ("patient":"κΉ€μ½”λ”©") 

(3) POST μš”μ²­μ— λŒ€ν•œ 응닡 λ°˜ν™˜ :

λͺ…ν™•ν•œ 응닡 μ½”λ“œ(201 Created) 확인,
μ˜ˆμ•½ μ™„λ£Œ κ²°κ³Όλ₯Ό Location 헀더에 URI둜 λ°˜ν™˜(Location: slots/123/appointment)
ν•˜μ—¬ 응닡을 확인할 수 있음 

(4) REST μ„±μˆ™λ„ λͺ¨λΈ - 3단계

βœ… HATEOAS(Hypermedia As The Engine Of Application State) ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ 적용 ν•˜κΈ°.

μš”μ²­μ€ 2단계와 λ™μΌν•˜μ§€λ§Œ, μ‘λ‹΅μ—λŠ” λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό ν¬ν•¨ν•œ 링크 μš”μ†Œλ₯Ό μ‚½μž…ν•˜μ—¬ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
ν•˜μ΄νΌ λ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ 톡해 응닡에 λŒ€ν•΄ λ‹€μ–‘ν•œ μ•‘μ…˜ μš”μ†Œλ₯Ό μ μš©ν•  수 μžˆλ‹€.

ex. μ˜ˆμ•½ κ°€λŠ₯ μ‹œκ°„ 확인 ν›„ κ·Έ μ‹œκ°„λŒ€μ— μ˜ˆμ•½ν•  수 μžˆλŠ” 링크λ₯Ό μ‚½μž…


profile
기둝을 μ •λ¦¬ν•˜λŠ” 곡간!

0개의 λŒ“κΈ€