Post

🀍 What is RESTful API?

RESTλž€?

μ›”λ“œ μ™€μ΄λ“œ μ›Ήμ˜ μ•„ν‚€ν…μ²˜ 섀계 및 κ°œλ°œμ„ μ•ˆλ‚΄ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌ

  • λΆ„μ‚°ν˜• 인터넷 규λͺ¨ ν•˜μ΄νΌλ―Έλ””μ–΄ μ‹œμŠ€ν…œμ˜ μ•„ν‚€ν…μ²˜κ°€ μ–΄λ–»κ²Œ μž‘λ™ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ 일련의 μ œμ•½ 쑰건을 μ •μ˜
  • ν†΅μΌλœ μΈν„°νŽ˜μ΄μŠ€, ꡬ성 μš”μ†Œμ˜ 독립적 배포, ꡬ성 μš”μ†Œ κ°„μ˜ μƒν˜Έ μž‘μš© ν™•μž₯성을 κ°•μ‘°
  • 캐싱을 μ΄‰μ§„ν•˜μ—¬ μ‚¬μš©μžκ°€ μΈμ‹ν•˜λŠ” λŒ€κΈ° μ‹œκ°„μ„ 쀄이고 λ³΄μ•ˆμ„ κ°•ν™”ν•˜λ©° λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ„ μΊ‘μŠν™”ν•˜λŠ” κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜λ₯Ό μƒμ„±ν•œλ‹€.
An entity-relationship model of the concepts expressed in the REST architectural style
REST μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌλ‘œ ν‘œν˜„λœ Entity-관계 λͺ¨λΈ

즉, 인터넷과 같은 λ³΅μž‘ν•œ λŒ€κ·œλͺ¨ κ³ μ„±λŠ₯ 톡신을 μ•ˆμ •μ μœΌλ‘œ 지원할 수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ§„ μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ‹€.

REST의 ꡬ성

βš™οΈ μžμ›(Resource) - URI

βš™οΈ ν–‰μœ„(Verb) - HTTP Method

βš™οΈ ν‘œν˜„(Representations) - JSON, XML

REST Constraints

RESTλŠ” κ³΅μ‹μ μœΌλ‘œ λ‹€μŒκ³Ό 같은 μ œμ•½ 쑰건을 따라야 ν•œλ‹€.

Client-Server Architecture

  • ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ λ””μžμΈ νŒ¨ν„΄μ€ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ λ¬Έμ œμ™€ 데이터 μ €μž₯μ†Œ 문제λ₯Ό λΆ„λ¦¬ν•˜λŠ” 문제 뢄리 원칙을 적용
  • ꡬ성 μš”μ†Œμ˜ 독립성 ν–₯상

Stateless

  • μ„œλ²„κ°€ μ„Έμ…˜ 정보λ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŒ
  • λ“€μ–΄μ˜€λŠ” μš”μ²­λ§Œμ„ λ‹¨μˆœνžˆ μ²˜λ¦¬ν•˜λ©΄ λ˜λ―€λ‘œ μ„œλΉ„μŠ€μ˜ μžμœ λ„κ°€ λ†’μŒ
  • λŒ€μš©λŸ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 이상적이며 μ„Έμ…˜ 정보 보쑴으둜 인해 λ°œμƒν•˜λŠ” μ„œλ²„ λΆ€ν•˜ 예방

Cacheability

  • μΊμ‹œ κ°€λŠ₯
  • HTTP κΈ°μ‘΄ μ›Ήν‘œμ€€μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— HTTPκ°€ κ°€μ§„ 캐싱 κΈ°λŠ₯ 적용 κ°€λŠ₯
  • HTTP ν”„λ‘œν† μ½œ ν‘œμ€€μ—μ„œ μ‚¬μš©ν•˜λŠ” Last-Modified νƒœκ·Έλ‚˜ E-Tagλ₯Ό μ΄μš©ν•˜λ©΄ 캐싱 κ΅¬ν˜„ κ°€λŠ₯

Layered system

  • REST μ„œλ²„λŠ” λ‹€μΆ© κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 있고 λ‘œλ“œ λ°ΈλŸ°μ‹±, μ•”ν˜Έν™” 계측을 μΆ”κ°€ν•΄ κ΅¬μ‘°μƒμ˜ μœ μ—°μ„±μ„ λ‘˜ 수 있고 Proxy, κ²Œμ΄νŠΈμ›¨μ΄ 같은 λ„€νŠΈμ›Œν¬ 기반의 쀑간맀체λ₯Ό μ‚¬μš©ν•  수 있게 함

Code on demand (optional)

  • μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ μ‹€ν–‰ν•  수 μžˆλŠ” κΈ°λŠ₯을 제곡
  • μœ μΌν•˜κ²Œ optionalν•œ 원칙이며, ν˜„μž¬λŠ” λ³΄μ•ˆ 및 ν˜Έν™˜μ„± 문제둜 잘 μ‚¬μš©λ˜μ§€ μ•ŠμŒ

Uniform interface

  • URI둜 μ§€μ •ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•˜λŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌ

RESTful APIλž€?

REST μ•„ν‚€ν…μ²˜ μ œμ•½ 쑰건을 μ€€μˆ˜ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜

  • μ„œλ²„μ˜ μžμ›μ„ ν΄λΌμ΄μ–ΈνŠΈμ— ꡬ애받지 μ•Šκ³  μ‚¬μš©ν•  수 있게 ν•˜λŠ” 섀계 방식. HTTP μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ μ„œλ²„μ˜ μžμ›μ„ λ°˜ν™˜ν•œλ‹€.
  • λ°˜ν™˜λ˜λŠ” λ°μ΄ν„°λŠ” λͺ¨λ“  κΈ°κΈ°μ—μ„œ ν†΅μš©λ  수 μžˆλ‹€.
  • μ›Ήμ—μ„œ μ‹€μ œλ‘œ REST μŠ€νƒ€μΌμ„ λͺ¨λ‘ μ§€ν‚€λŠ” λ°λŠ” 어렀움이 μžˆλ‹€. λ”°λΌμ„œ, λͺ¨λ“  REST μ œμ•½ 쑰건을 μ§€ν‚€μ§€ λͺ»ν•˜λ”라도 RESTful API라고 λΆˆλ¦¬λŠ” κ²½μš°κ°€ λ§Žλ‹€.
  • RESTλŠ” κ·Έ μžμ²΄λ‘œλŠ” ν‘œμ€€μ΄ μ•„λ‹ˆμ§€λ§Œ RESTful κ΅¬ν˜„μ€ HTTP, URI, JSON 및 XMLκ³Ό 같은 ν‘œμ€€μ„ μ‚¬μš©ν•œλ‹€.
  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ 화면이 μ•„λ‹Œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€.
  • μ΄λ•Œ μ‚¬μš©ν•˜λŠ” 응닡 데이터가 JSON(Javascript Object Notation)이닀.

❔ API(Application Programming Interface)

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°„νŽΈνžˆ μ‚¬μš©ν•  수 있게 ν•˜λŠ” 미리 μ •ν•΄μ§„ μΌμ’…μ˜ μ•½μ†μœΌλ‘œ μ‚¬μš©μžμ™€ ν”„λ‘œκ·Έλž¨ κ°„ μƒν˜Έ μž‘μš©μ„ λ•λŠ”λ‹€.
  • REST APIλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ˜ μƒν˜Έ μž‘μš©, 즉 HTTP μš”μ²­μ— λ”°λ₯Έ JSON 응닡에 λŒ€ν•œ 약속이닀.

❔ JSON

킀와 κ°’μœΌλ‘œ κ΅¬μ„±λœ μ •λ ¬λ˜μ§€ μ•Šμ€ 속성(property)의 μ§‘ν•©

1
2
3
4
5
{
    "name": "망고",
    "breeds": "κ³¨λ“ λ¦¬νŠΈλ¦¬λ²„",
    "age": 2
}

RESTful API λ””μžμΈ κ°€μ΄λ“œ

πŸ’‘ URIλŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

1
GET /members/delete/1

λ¦¬μ†ŒμŠ€λͺ…은 λ™μ‚¬λ³΄λ‹€λŠ” λͺ…사λ₯Ό μ‚¬μš©ν•œλ‹€.

μœ„μ™€ 같은 방식은 RESTλ₯Ό μ œλŒ€λ‘œ μ μš©ν•˜μ§€ μ•Šμ€ URIλ‹€. URIλŠ” μžμ›μ„ ν‘œν˜„ν•˜λŠ”λ° 쀑점을 두어야 ν•˜κΈ° λ•Œλ¬Έμ— delete와 같은 ν–‰μœ„μ— λŒ€ν•œ ν‘œν˜„μ΄ λ“€μ–΄κ°€μ„  μ•ˆλœλ‹€.

πŸ’‘ μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method(GET, POST, PUT, DELETE)둜 ν‘œν˜„ν•œλ‹€.

1
DELETE /members/1

μœ„ μ½”λ“œλ₯Ό HTTP Methodλ₯Ό 톡해 μˆ˜μ •ν•΄ μ•„λž˜μ™€ 같이 ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

정보λ₯Ό κ°€μ Έμ˜€λŠ” 경우 GET, μΆ”κ°€μ˜ 경우 POST Methodλ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•œλ‹€.

μœ„μ™€ 같이 URIλŠ” μžμ›μ„ ν‘œν˜„ν•˜λŠ” 데에 μ§‘μ€‘ν•˜κ³  ν–‰μœ„μ— λŒ€ν•œ μ •μ˜λŠ” HTTP Methodλ₯Ό 톡해 ν•˜λŠ” 것이 RESTful APIλ₯Ό μ„€κ³„ν•˜λŠ” 쀑심 κ·œμΉ™μ΄λ‹€.

RESTful API의 μž₯점

  • HTTP ν”„ν† ν† μ½œμ˜ ν‘œμ€€ 인프라λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λ―€λ‘œ REST API μ‚¬μš©μ„ μœ„ν•œ λ³„λ„μ˜ 인프라λ₯Ό ꡬ좕할 ν•„μš”κ°€ μ—†λ‹€.
  • HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ— λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
  • REST API λ©”μ‹œμ§€κ°€ μ˜λ„ν•˜λŠ” λ°”λ₯Ό λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚΄λ―€λ‘œ μ˜λ„ν•˜λŠ” λ°”λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 역할을 λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•œλ‹€.

RESTful API의 단점

  • ν‘œμ€€μ΄ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ 관리가 μ–΄λ ΅λ‹€.
  • HTTP Method ν˜•νƒœκ°€ μ œν•œμ μ΄λ‹€.
  • μ•ˆν‹° νŒ¨ν„΄μœΌλ‘œ 섀계될 κ°€λŠ₯성이 λ†’λ‹€.

πŸ”— 참고자료

πŸ“š 더 곡뢀해야 ν•  것

  • μ•ˆν‹° νŒ¨ν„΄
This post is licensed under CC BY 4.0 by the author.