RESTful API
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ๋ํ ์ํคํ ์ฒ ์คํ์ผ
RESTful API Naming
- ๋ฆฌ์์ค ํํ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ผ.
- ๊ณ์ธต๊ด๊ณ๋ฅผ ๊ตฌ๋ถ์ง๊ธฐ ์ํด ์ฌ๋์(/)๋ฅผ ์ฌ์ฉํ๋ผ.
- URI ๋ง์ง๋ง์ ์ฌ๋์๋ฅผ ๋ถ์ด์ง ๋ง๋ผ.
- ํ์ดํ(-) ๊ธฐํธ๋ฅผ ์ฌ์ฉํด ๊ฐ๋ ์ฑ์ ๋์ฌ๋ผ.
- ์ธ๋์ค์ฝ์ด๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ.
- ์๋ฌธ์๋ง์ ์ฌ์ฉํ๋ผ.
๋ฆฌ์์ค ํํ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ผ.
RESTful URI ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฆฌ์์ค๋ ์ํ๋๋ ํ์๊ฐ ์๋๋ผ ๊ฐ์ฒด์ด๋ค.
์ด ๋ฆฌ์์ค๊ฐ ์ด๋ ๋ฒ์ฃผ์ ํด๋นํ๋์ง ํ์ธํ๊ณ ๊ทธ ๋ฒ์ฃผ์ ๋ง๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ผ๊ด๋๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
โ๏ธ ๋ฌธ์(Document)
- ๋จ์ผ ๊ฐ๋ (ํ์ผ ํ๋, ๊ฐ์ฒด ์ธ์คํด์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค row)
- ๋จ์ ์ฌ์ฉ(/device-management, /user-management)
http://api.example.com/device-management/managed-devices/{device-id}
http://api.example.com/user-management/users/{id}
http://api.example.com/user-management/users/admin
โ๏ธ ์ปฌ๋ ์ (Collection)
- ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํฐ๋ฆฌ
- ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
- POST ๊ธฐ๋ฐ ๋ฑ๋ก
- ๋ณต์ ์ฌ์ฉ
- ex) ํ์ ๊ด๋ฆฌ API
http://api.example.com/user-management/users
http://api.example.com/user-management/users/{id}
โ๏ธ ์คํ ์ด(Store)
- ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ์์ ์ ์ฅ์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ
- PUT ๊ธฐ๋ฐ ๋ฑ๋ก
- ๋ณต์ ์ฌ์ฉ
- ex) ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ
http://api.example.com/files
http://api.example.com/files/new_file.txt
โ๏ธ ์ปจํธ๋กค URI ํน์ ์ปจํธ๋กค๋ฌ(Controller)
- ๋ฌธ์, ์ปฌ๋ ์ , ์คํ ์ด๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ถ๊ฐ ํ๋ก์ธ์ค ์คํ
- ๋์ฌ๋ฅผ ์ง์ ์ฌ์ฉ
- ๋์ฌ ์ฌ์ฉ
- ex) GET, POST ๋ง ์ฌ์ฉํ ์ ์๋ HTTP FORM ์ ๊ฒฝ์ฐ ์ปจํธ๋กค URI(๋์ฌ) ๋ฅผ ์ฌ์ฉ
http://api.example.com/cart-management/users/{id}/cart/checkout
http://api.example.com/song-management/users/{id}/playlist/play
์ผ๊ด์ฑ์ด ํต์ฌ์ด๋ค.
์ผ๊ด๋ ๋ฆฌ์์ค์ URI ํ์์ ์ฌ์ฉํ๋ฉด ๋ชจํธํจ์ด ์ต์ํ๋๊ณ ๊ฐ๋ ์ฑ๊ณผ ์ง์์ฑ์ด ๊ทน๋ํ๋๋ค.
โ๏ธ ๊ณ์ธต ๊ด๊ณ ํํ์ ์ํด ์ฌ๋์๋ฅผ ์ฌ์ฉํ๋ผ.
http://api.example.com/device-management
http://api.example.com/device-management/managed-devices
http://api.example.com/device-management/managed-devices/{id}
http://api.example.com/device-management/managed-devices/{id}/scripts
http://api.example.com/device-management/managed-devices/{id}/scripts/{id}
โ๏ธ ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ.
http://api.example.com/device-management/managed-devices/ /* X */
http://api.example.com/device-management/managed-devices /* O */
โ๏ธ ๊ฐ๋ ์ฑ์ ์ํด ํ์ดํ์ ์ฌ์ฉํ๋ผ.
// More readable
http://api.example.com/inventory-management/managed-entities/{id}/install-script-location
// Less readable
http://api.example.com/inventory-management/managedEntities/{id}/installScriptLocation
โ๏ธ ์ธ๋์ค์ฝ์ด๋ ์ฌ์ฉํ์ง ๋ง๋ผ.
์ผ๋ถ ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด์์๋ `_`๊ฐ ๊ฐ๋ ค์ง ์ ์๊ธฐ ๋๋ฌธ์ ํผ๋์ ํผํ๊ธฐ ์ํด `-`์ ์ฌ์ฉํ๋ค.
// More readable
http://api.example.com/inventory-management/managed-entities/{id}/install-script-location
// More error prone
http://api.example.com/inventory_management/managed_entities/{id}/install_script_location
โ๏ธ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ผ.
์คํค๋ง์ ํธ์คํธ์๋ง ๋์๋ฌธ์ ๊ตฌ๋ณ์ด ์๊ณ , ์ด์ธ์๋ ๋์๋ฌธ์๊ฐ ๊ตฌ๋ณ๋๋ค.
์๋ 3๊ฐ์ URL์ ๋์๋ฌธ์ ๊ตฌ๋ณ์ด ์๋ค๋ฉด ๋ชจ๋ ๋์ผํ์ง๋ง 1, 2๋ฒ์ ๋์ผํ๊ณ 3๋ฒ์ ๊ฐ์ง ์๋ค.
http://api.example.org/my-folder/my-doc // 1
HTTP://API.EXAMPLE.ORG/my-folder/my-doc // 2
http://api.example.org/My-Folder/my-doc // 3
โ๏ธ ํ์ผ ํ์ฅ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ.
// X
http://api.example.com/device-management/managed-devices.xml
// O
http://api.example.com/device-management/managed-devices
CRUD ํจ์๋ช ์ ์ฌ์ฉํ์ง ๋ง๋ผ.
URI ๋ ์ด๋ ํ ๋์์ด ์ํ๋๋์ง๋ฅผ ๊ฐ๋ฆฌํค๋๊ฒ ์๋๋ผ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ์ด๋ค.
๋ฆฌ์์ค์ ๋ํ ์์ ์ HTTP Method๋ฅผ ์ด์ฉํ๋ค.
HTTP GET http://api.example.com/device-management/managed-devices/{id} // Get device for given Id
HTTP PUT http://api.example.com/device-management/managed-devices/{id} // Update device for given Id
HTTP DELETE http://api.example.com/device-management/managed-devices/{id} // Delete device for given Id
ํํฐ๋ฅผ ์ํด ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ผ.
๋ฆฌ์์ค์ ๋ํ ์ ๋ ฌ, ํํฐ๋ง, ํ์ด์ง์ ์ ๊ท API ๋ฅผ ์์ฑํ์ง ์๊ณ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํ๋ผ.
http://api.example.com/device-management/managed-devices
http://api.example.com/device-management/managed-devices?region=USA
http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ
http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ&sort=installation-date
์ฐธ๊ณ ์๋ฃ
https://restfulapi.net/resource-naming
'๊ฐ๋ฐ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP RESTful API / ์์ ์ฑ๊ณผ ๋ฉฑ๋ฑ์ฑ (0) | 2023.02.22 |
---|---|
in-memory / cache / redis / memcached (0) | 2022.07.10 |
HTTP๋ ๋ฌด์์ผ๊น์? (0) | 2021.10.16 |
์ธํฐ๋ท์ ์ด๋ป๊ฒ ์๋๋ ๊น์? (0) | 2021.10.07 |
๋๊ธ