API์ REST API
API (Application Programming Interface)
์ํํธ์จ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์๋ก ํต์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํ๋ ๊ท์น ์งํฉ!
Interface
์ธํฐํ์ด์ค๋? ํ๋์ ์ฌ๋ฌผ์ด ๋ค๋ฅธ ์ฌ๋ฌผ๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
CLI, GUI์์ ์ฌ์ฉํ๋ฏ! ์ธํฐํ์ด์ค๋ '๋งค๊ฐ์ฒด'์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
REST API
REST API ๋ REST์์น์ ๋ฐ๋ฅด๋ API, HTTP ๊ท์ฝ์ ์ ๋ฐ๋ฅธ API๋ค.
์๋์ ๊ธ์ REST API์ URI์ ๋ํด ์์ธํ ์ ๋ฆฌํ ๋ฐ ์๋ค.
https://yesolz.tistory.com/entry/REST-API-URI-%EC%84%A4%EA%B3%84-%EA%B7%9C%EC%B9%99
REST API URI ์ค๊ณ ๊ท์น
API ๋ค์ด๋ฐ์ ํ๋ค๊ฐ ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค. [PUT] /urls/{id}/move๊ณผ [PUT] /urls/move/{id} ์ค ์ด๋ค ๊ฒ ๋ ๋์์ง ๋ง์ด๋ค. ์ด๋ฅผ ์ํด ๊ตฌ๊ธ๋ง์ ํ๋ค๊ฐ, REST API URI๋ฅผ ๋์์ธํ๋ ๊ท์น ํน์ ์ปจ๋ฒค์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์
yesolz.tistory.com
REST API vs RESTful API?
RESTful API๊ฐ REST ์ํคํ ์ฒ๋ฅผ ๋ ์ถฉ์คํ ์๋ฒฝํ๊ฒ ๋ฐ๋ฅธ API์์ ๊ฐ์กฐํ๋ ํํ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฆ, RESTful API ⊆ REST API
HTTP method
- ์์ฑ(=๋ฑ๋ก): POST
- ์กฐํ: GET
- ์์ : PUT(๋ฎ์ด์ฐ๊ธฐ) / PATCH(๋ถ๋ถ ์์ )
- ์ญ์ : DELETE
- HEAD, OPTIONS, CONNECT, TRACE - ๋ฐ์ดํฐ ์ธ์ ๊ฒ๋ค์ ์ฌ์ฉ.
REST API URL ๊ท์น
- ๋๋ฌธ์ x, ์๋ฌธ์ o
- ์ธ๋๋ฐ(_) x, ํ์ดํ(-) o
- ๋ง์ง๋ง์ / ํฌํจ x
- ํ์๋ ๋ชฉ์ ์ ํฌํจํ์ง ์๋๋ค
- ํ์ผ ํ์ฅ์ ํฌํจ x
- ๋ณต์ํ์ ์ด๋ค
์ด ์ค ํท๊ฐ๋ฆด ์ ์๋ ๋ถ๋ถ ๋ช ๊ฐ๋ง ์์ธํ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค!
ํ์๋ ๋ชฉ์ ์ ํฌํจํ์ง ์๋๋ค
REST API์ URL์ ๋ฆฌ์์ค๋ฅผ ๋ช ํํ๊ฒ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ด ์์น์ ๋ฐ๋ผ, URL์ ๋ฆฌ์์ค์ ๋ํ ํ์(ex. create, delete, update)๋ ๋ชฉ์ (ex. save, download)๋ฅผ ๋ช ์์ ์ผ๋ก ํฌํจํ์ง ์๋๋ค.
์ด๋ฌํ ํ์๋ ๋ชฉ์ ์ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๊ธฐ ๋๋ฌธ์ด๋ค.
HTTP ๋ฉ์๋๋ ์ด๋ฏธ ๊ฐ๊ธฐ ๋ค๋ฅธ ํ์๋ฅผ ํํํ๊ธฐ ์ํด ์กด์ฌํ๊ธฐ ๋๋ฌธ์, URL์ ํ์๋ฅผ ํฌํจํ ํ์๊ฐ ์๋ค.
- ์๋ชป๋ ์์: /create-user
- -> /users๋ก ํ๊ณ , HTTP POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
ํ์ผ ํ์ฅ์ ํฌํจ x
์ฌ์ฉ์ ๋ชฉ๋ก์ JSON ํ์์ผ๋ก ์ ๊ณตํ๋ API๋ฅผ /users.json ํ์์ผ๋ก ์ ๊ณตํ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธธ๊น?
-> URL์ด ํน์ ํ์(JSON)์ ์ข ์์ ์ด๋ค. ๋ง์ฝ XML ํ์์ ์๋ต์ ์์ฒญํ๋ ค๋ฉด, ๋ณ๋์ URL(/users.xml)์ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
REST์ ๊ธฐ๋ณธ ์์น ์ค ํ๋๋ ๋ฆฌ์์ค์ ๊ทธ ๋ฆฌ์์ค์ ๋ํ ํํ(ํ์)์ ๋ถ๋ฆฌํ๋ ๊ฒ์ธ๋ฐ, ํ์ผ ํ์ฅ์๋ฅผ ํฌํจํ๋ฉด ๋ฆฌ์์ค์ ํํ ๋ฐฉ์์ด URL์ ๊ณ ์ ๋์ด ๋ฒ๋ฆฐ๋ค.
๋ฐ์ดํฐ ํ์์ URL์ด ์๋ HTTP ํค๋๋ฅผ ํตํด ์ง์ ๋๋ค.
์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๋ Accept ํค๋๋ฅผ ํตํด ์๋ฒ์๊ฒ ์ด๋ค ํ์์ ์๋ต์ ์ํ๋์ง ์ง์ ํ ์ ์๋ค.
์์ ์์๋ฅผ ์ด์ด์ ๋ค์ด๋ณด๋ฉด,
์์ฒญ์ GET /users๋ก ํ๋
ํค๋์ Accept: text/html, Accept: application.json ๋ฑ์ ์ด์ฉํ์ฌ
์๋ฒ์ ์ด๋ค ํ์์ ์๋ต์ ์ํ๋์ง ์ง์ ํ ์ ์๋ ๊ฒ์ด๋ค.
๋ณต์ํ์ ์ฌ์ฉํ๋ค
REST API ์์๋ ๋ฆฌ์์ค๋ฅผ ๋ํ๋ด๋ ๊ฒฝ๋ก์ ๋ณต์ํ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ ํด๋น ๊ฒฝ๋ก๊ฐ ํน์ ๋ฆฌ์์ค ์งํฉ(collection)์ ๋ํ๋ธ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด /products๋ ๋ชจ๋ ์ํ๋ค์ ์งํฉ์ ๋ํ๋ด๋ ๊ฒ์ด๋ค.
๊ฐ๋ณ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ฉด, ํด๋น ์ํ์ ๊ณ ์ ์๋ณ์(ID)๋ฅผ URL์ ์ถ๊ฐํ์ฌ ์ง์ ํ ์ ์๋ค. ์ด๋๋ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ ๋ณต์ํ์ ์ ์งํ๋ค.
REST API ์ค๊ณ ์์
1. ์ํ ์ ์ฒด '์กฐํ' GET
/products
2. ์ํ id ๊ฐ๋ณ '์กฐํ' GET
/products/{id}
3. ์ํ id ๊ฐ๋ณ '์์ ' PUT
/products/{id}
ref
https://www.cloudflare.com/ko-kr/learning/security/api/what-is-an-api/
REST API์ ์์น๋ค์ ์์๊ฐ๋ฉด์, ๋จ์ํด ๋ณด์ด์ง๋ง ๊ทธ ์์ ์ผ๋ง๋ ํฐ ํจ์จ์ด ๋ด๊ฒจ ์๋์ง ์๊ฒ ๋์๋ค.
์ด๋ฐ ๊ท์น๋ค์ ํตํด ๋ณด๋ค ํจ์จ์ ์ด๊ณ ๊ฒฌ๊ณ ํ API ์ค๊ณ์ ๊ธฐ์ฌํ๊ณ ์ถ๋ค.