Achivement Goals
๐ REST API์ ๋ํด ์ดํดํ ์ ์๋ค.
-REST API ๋ฌธ์๋ฅผ ์ฝ์ ์ ์๋ค.
-REST API์ ๋ง์ถฐ ๋์์ธํ ์ ์๋ค.
-Open API์ API Key์ ๋ํด ์ดํดํ ์ ์๋ค.
๐ Postman์ด ๋ฌด์์ธ์ง ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
-HTTP API ํ ์คํ ์ด ๋ฌด์์ธ์ง ์ ์ ์๋ค.
-Postman์ ์ฌ์ฉํ์ฌ ์๋ฒ์ GET, POST ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ์ ์ ์๋ค.
-Postman์ ์ฌ์ฉํ์ฌ Open Weather Map Open API์ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ธ CSR์์๋ ๋ช๊ฐ์ง์ ๋ฉ์๋๋ฅผ ์ด์ฉํด ์๋ฒ์ ํต์ ํ๋ค.
GET(๋ฐ์ดํฐ ์์ฒญ) / POST(์๋ก์ด ๋ฐ์ดํฐ ์ ์ก) / DELETE(๋ฐ์ดํฐ ์ญ์ )..
์ด๋ ๊ฒ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ์ ์๋ฒ๊ฐ ์ ์ ํ ์๋ต์ ํ๋ API๋ฅผ REST API ๋ผ๊ณ ํ๋ค.
root-endpoint(or root-URL) : API๋ก ์๋ฒ์ ์์ฒญํ ๋, ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฝํ๋ ์์์ ์ ๋ปํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋๋ฉ์ธ ์ฃผ์์ ๋ฃจํธ(/) ๋ฅผ ๊ฐ๋ฅดํจ๋ค.
path(or url-path) : API๋ฅผ ํตํด ์๋ฒ์ ํต์ ํ ๋ ์๋ฒ์ ํต์ ํ ์ ์๋ key ์ญํ ์ ํ๋ค. ์๋ฒ์ ์ ์๋ ๋ฌธ์์ด์ ๋ฐ๋ผ path ๊ฐ ๋ฌ๋ผ์ง๋ค.
GET / {githubID}/messages
{githubID} ๋ถ๋ถ์๋ ๋ฉ์ธ์ง๋ฅผ ์กฐํํ ์ฌ๋์ ์์ด๋๊ฐ ๋ค์ด๊ฐ๋ค.
ํ์์ ์ด์ง ์์ง๋ง ์ถ๊ฐ์ ์ธ ํ๋ผ๋ฏธํฐ(query parameter) ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด,
/{githubID}/messages?roomname=์ค์ํธ๋ฃธ
์ฌ๊ธฐ์ ํ๋ผ๋ฏธํฐ๋ roomname ์ด๊ณ ํน์ฑ roomname ๋ง ์กฐํํ ์ ์๋, ๋ฌธ์์ด ํ์์ผ๋ก ์์ฑ๋์๋ค.
์๋ต์ ๋ฐฐ์ด๊ฐ์ฒด, JSON ํ์์ผ๋ก ์ธ ์ ์๋ค.
(์ ๋ถ ์๋ฐ์ดํ๋ก ํด์ผํ๋ค. ๋ง์ด๋ฏธ์คํ
์.)
[
{'id' : 1, //์ซ์ํํ
'userName':'sook', //์ดํ ๋ฌธ์์ดํํ
'text' : 'hi',
'roomname' : '์ค์ํธ๋ฃธ',
'date' : '2021-06-25T10:34:21:134'
},
{'id' : 2,
'userName':'mike',
'text' : 'bye',
'roomname' : '๋๋ญ์ค๋ฃธ',
'date' : '2021-06-25T12:20:45:134'
},
...
]
POST /{githubID}/messages
post ๋ก ์์ฒญ์, username, text,roomname,,์ถ๊ฐํ ์ฌํญ์ JSON ํ์์ผ๋ก ๋ณด๋ธ๋ค.
application/json
์์๊ฐ์ด ์์ฒญํ๋ค๋ฉด ์๋ต์ ์ด๋ ๊ฒ ์ฌ ๊ฒ์ด๋ค.
{
"id" : 5;
}
POST /{githubID}/ clear
{
'message' : 'message initialized!'
}
๋ฐ๋์ ์ด๋ป๊ฒ ํด์ผํ๋ค~ ๋ผ๋ ๊ณต์์ ์ธ ๊ท๊ฒฉ์ ์์ง๋ง ๋ช๊ฐ์ง์ ๋ชจ๋ฒ์ ์ธ ์ฌ๋ก๋ค์ ์๋ค. ๊ทธ ์ค ๋ค์ฏ๊ฐ์ง ๊ฐ์ด๋๋ฅผ ๋ค์๋ฉด,
๊ณผ๊ฑฐ์๋
getUser(1234),createUser(user),deleteAddres(1234)
์ด๋ ๊ฒ ์ฐ์๋ค๋ฉด,
GET/users/1234, POST/users(with JSON describing a user in the body) DELETE/addresses/1234
์ด๋ ๊ฒ ์ฐ๋๊ฒ ์ถ์ธ์ธ๊ฐ๋ณด๋ค.
GET ๋ฉ์๋๋ ์ฃผ์ด์ง URI ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ์กฐํ,๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋ค. ๊ทธ๋ฌ๋ ์์ฒญ์, ๋ฐ์ดํฐ๋ง ์์ฒญ ํด์ผํ๋ฉฐ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ์ํฅ์ด ๋ผ์น์ง ์๋๋ก ํด์ผํ๋ค.
POST ๋ฉ์๋๋ ๊ณ ๊ฐ์ ๋ณด, ํ์ผ์
๋ก๋, HTML form๋ค์ ์ฌ์ฉํ๋ ๋ค๋ฅธ๊ฒ๋ค ๋ฑ๋ฑ .. ์๋ฒ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๊ฒ์ ์์ฒญํด์ผ ํ๋ค.
์ฃผ์ ์ฝ๋๋ก๋,
200(ok), 201(์๋ก์ด ๋ฆฌ์์ค ์์ฑ),204(๋ฆฌ์์ค ์ญ์ ),304(๋ฐ์ดํฐ๋ณ๊ฒฝ์ด ๋์ง์์),400(JSON์ด ์ ํจํ์ง ์๊ฑฐ๋ ์์ฒญ์ด invalid ํ ๋),401(์ ๊ทผ์ฑx)
๋ฑ์ด ์๋ค.
์ด์ผ ,, ๋ค๋ฆ๊ฒ ๋ฐ๊ฒฌํ๊ฑด๋ฐ api ์์ฒญ์ ๋ฌด์กฐ๊ฑด ์๋ฐ์ดํ๋ก ํด์ผํ๋๋ด?
์ ๋ถ์์ ์ ๊ณตํ๋ ๊ณต๊ณต๋ฐ์ดํฐ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก, ์ ๋ถ๋ ์คํ๋ API ๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. ๋ง๊ทธ๋๋ก ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์๋ API์ด์ง๋ง ๋ฌด์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ ํด์ง ์ด์ฉ์์น์ ์ํด ์ ํ์ฌํญ์ด ์์ ์๋ ์๋ค.
๋ํ์ ์ธ ์ฌ์ดํธ : Open Weather Map
[ ๋ฌด๋ฃ๋ก ๋ ์จ API ์ฌ์ฉ ๊ฐ๋ฅ, JSON ํํ๋ก ์๋ต.]
API๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์ API key๋ผ๋ ๊ฒ์ด ํ์ํ๋ค. ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์์ง๋ง, ๋ก๊ทธ์ธ ๋ ์ด์ฉ์์ ํํด์ ์ ๊ทผํ ์ ์๋ ํํ๋ฅผ API key ํํ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ API key๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ผ๋ง ์๋ต์ ๋ฐ์ ์ ์๋ค.
Open Weather Map ์ฌ์ดํธ์ ์ ์ํ์ฌ ๋ก๊ทธ์ธ ํ ํ,
My API keys ๋ฅผ ํด๋ฆญํ๋ฉด ๋ค์๊ณผ๊ฐ์ API key๋ฅผ ์ ๊ณตํ๋ค.
๋ณธ๊ฒฉ HTTP API ๋ฅผ ํ ์คํธํด๋ณด๊ธฐ ์ํด ๊ฐ์ฅ ์ ๋ช ํ ์ฌ์ดํธ,postman์ ์ฌ์ฉํด๋ณด๋๋ก ํ๊ฒ ๋ค.
http://3.36.72.17:3000/
์์ฒญ ํ์
์ ๋ฐ๋ผ ์ ํํ ์ ์๋ค. (GET/POST.. ๋ฑ๋ฑ)
๋ง์ฝ POST ๋ฐฉ์์ผ๋ก ๋ด์ฉ์ถ๊ฐํ์ฌ ์ ์ก์์ฒญํ๊ณ ์ถ๋ค๋ฉด
๊ผญ ์๋ฐ์ดํ๋ก ์์ฑํ์๊ณ ^^
JSON ํํ๋ก ์์ฑํด์ผ ํ๋ raw -> JSON ์ ์ ํํ์ฌ ์์ฑํด์ค๋ค.