ํค์๋๋ฅผ ๊ฒ์ํ๋ฉด ํค์๋์ ๋ํ ๋ด์ค๋ฅผ ๋์ค๊ฒ ํ๋ ๋ด์ค ๊ฒ์ API๋ฅผ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํ๋ค.
API ๋ง๋ค๊ธฐ ์ ์, ๊ธฐ๋ณธ ์ ํ ํ๊ธฐ
(1). serverless๋ก aws-openapi-server๋ฅผ ๋ง๋ค๊ณ vscode๋ก ์ด์ด์ฃผ์๋ค.
https://codebunny99.tistory.com/105
RestFul API๋ฅผ Serverless Framework๋ก ์ฐ๊ฒฐํ๊ธฐ
*** ์๋์ฝ๋ค ํ๋กฌํํธ์์ ๊ฐ์ํ๊ฒฝ ๋ง๋ค๋ฉด์ flask์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์์ค๋ค *** conda create -n lambda_310 python=3.10pip install flask flask-restful mysql-connector-python psycopg2-binary passlib flask-jwt-exte
codebunny99.tistory.com
(2). ๋์ปค ์ค์ ์ ํด์ค๋ค.
https://codebunny99.tistory.com/108
AWS ์๋ฒ ์ฐ๊ฒฐ ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฉ๋ ์ค์ฌ์ฃผ๋ Docker(๋์ปค) ์ค์นํ๊ธฐ
https://www.docker.com/products/docker-desktop/ Docker Desktop: The #1 Containerization Tool for Developers | DockerDocker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or
codebunny99.tistory.com
(3). ๊นํ๋ธ์ ์ฐ๊ฒฐํด์ค๋ค.
https://codebunny99.tistory.com/106
Serverless๋ก ๋ง๋ ํ๋ก์ ํธ ํด๋๋ฅผ ๊นํ๋ธ(Github)์ ์ฐ๊ฒฐํ๊ธฐ
cmd(๋ช ๋ นํ๋กฌํํธ) serverless ๋ผ๊ณ ์ ๋ ฅํ๋ค serverless ๋ฐฉํฅํค๋ก Flask API๋ก ์ด๋ํ๋ค ๊นํ๋ธ(Github) New repositoryํ๊ธฐ VSCode VSCode Serverless๋ก ์๊น ๋ง๋ ํด๋ ์ด๊ณ , ๊ฐ์ํ๊ฒฝ
codebunny99.tistory.com
(4). ๊นํ๋ธ ์ก์ ์ฆ ์ค์ ์ ํ๋ค.
https://codebunny99.tistory.com/107
Serverless๋ก ๋ง๋ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ ์ก์ ์ฆ(Github actions)๋ก ์๋ํํ๊ธฐ
์ฌ์ฉํ repository๋ฅผ ํด๋ฆญํ๊ณ Settings๋ก ์ด๋ํ๋ค. Settings์์ Security -> secrets and variables -> Actions๋ก ์ด๋ํ๊ณ New repository secret ๋ฒํผ์ ํด๋ฆญํ๋ค. https://codebunny99.tistory.com/104 ์๋ฃ
codebunny99.tistory.com
API ์์ฑํ๊ธฐ
๋จผ์ API์ ๋ํ ์ค๋ช ์ ๋ฐ์์ ์ฝ์ ์ ์๋ค.
https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
๊ฒ์ > ๋ด์ค - Search API
๊ฒ์ > ๋ด์ค ๋ด์ค ๊ฒ์ ๊ฐ์ ๊ฐ์ ๊ฒ์ API์ ๋ด์ค ๊ฒ์ ๊ฐ์ ๊ฒ์ API๋ ๋ค์ด๋ฒ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ค, ๋ฐฑ๊ณผ์ฌ์ , ๋ธ๋ก๊ทธ, ์ผํ, ์น ๋ฌธ์, ์ ๋ฌธ์ ๋ณด, ์ง์iN, ์ฑ , ์นดํ๊ธ ๋ฑ ๋ถ์ผ๋ณ๋ก ๋ณผ ์ ์๋ API์ ๋๋ค
developers.naver.com
vscode ์์ฑํ๊ธฐ
๋จผ์ , vscode ํฐ๋ฏธ๋ cmd ์ฐฝ์์ requests๋ฅผ ์ค์นํ๋ค.
pip install requests
requirements.txt ํ์ผ์ ๋ฃ์ด์ค๋ค.
config.py ํ์ผ์ ์์ฑํ๋ค.
์ด ์์, ๋ค์ด๋ฒ API ํค ๊ฐ์ ๋ฃ์ด์ค๋ค.
๋ค์ด๋ฒ API ํค ๊ฐ์,
https://developers.naver.com/main/
NAVER Developers
๋ค์ด๋ฒ ์คํ API๋ค์ ํ์ฉํด ๊ฐ๋ฐ์๋ค์ด ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก API ๊ฐ์ด๋์ SDK๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ๊ณต์ค์ธ ์คํ API์๋ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ, ๊ฒ์, ๋จ์ถURL, ์บก์ฐจ๋ฅผ ๋น๋กฏ ๊ธฐ๊ณ๋ฒ์ญ, ์
developers.naver.com
์ด๊ณณ์์ ํ์๊ฐ์ ํ ํ, Application ์์ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด,
์ด๊ณณ์์ ๋ณผ ์ ์๋ค.
app.py๋ฅผ ์์ฑํ๋ค.
import serverless_wsgi
from flask import Flask
from flask_restful import Api
from resources.news import NewSearchResource
app = Flask(__name__)
api = Api(app)
api.add_resource( NewSearchResource , '/news/search')
def handler(event, context) :
return serverless_wsgi.handle_request(app, event, context)
if __name__ == '__main__':
app.run()
resources ํด๋๋ฅผ ๋ง๋ค๊ณ , news.py๋ฅผ ์์ฑํ๋ค.
from flask import request
from flask_restful import Resource
# API ์์ฒญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import requests
# ๋ด๊ฐ ๋ง๋ ๋ณด์ ๊ฐ class
from config import Config
class NewSearchResource(Resource) :
def get(self) :
# params ์ ์ฟผ๋ฆฌ ๊ฐ์ด ์์ผ๋ฉด ๋ฆฌํด
if 'query' not in request.args :
return {"result":"fail", "error":"๊ฒ์์ด๋ ํ์์
๋๋ค."}, 400
# params์ ์๋ ๊ฐ ๋ณ์๋ก ์ ์ฅ (๋์
๋๋ฆฌ์ฌ์ .get() ๋ ๊ฐ๋ฅํ๋ค.)
keyword = request.args.get('query')
# ๋ค์ด๋ฒ API ํธ์ถํ๋ค.
# API ํธ์ถํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ requests
# ํ์ด์ฌ ์ฝ๋๋ก GET, POST, PUT, DELETE API๋ฅผ
# ์ฒ๋ฆฌํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ requests ๋ค.
# openAPI ์์ ์ ๊ณตํ๋ url, params
# params ์์๋ ๋ด๊ฐ ์ค์ ํ ๊ฐ + ์ต์
๋ค
# openAPI ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์์ด๋ ๊ฐ ๊ณผ ์ํฌ๋ฆฟ ๊ฐ ์
๋ ฅ
url = 'https://openapi.naver.com/v1/search/news.json'
params = {'query' : keyword,
'display' : 30,
'sort' : 'date'}
headers = {'X-Naver-Client-Id' : Config.X_NAVER_CLIENT_ID,
'X-Naver-Client-Secret' : Config.X_NAVER_CLIENT_SECRET}
# ๊ฐ์ requests์ get()ํจ์ ์ฌ์ฉํด์ ๋ฐ์์ฃผ๊ธฐ
response = requests.get( url, params= params, headers= headers)
# ์๋ต์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ฐ๋๋ค.
# ํฌ์คํธ๋งจ ์๋ต ๋ฐ๋์ JSON์ผ๋ก ๋์ด์์ด์ ๊ฐ๋ฅํ๋ค.
response = response.json()
print( response )
return {"result" : "success",
"items" : response['items'],
"count" : len(response['items'])}
์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด,
๋์ปค๋ฅผ ์คํํ ์ฑ๋ก sls deploy๋ฅผ ํ๋๋ก ํ์.
Postman
Params ๋ถ๋ถ์ ์์ฑํด์ฃผ๊ณ ,
ํค๋ ๋ถ๋ถ์ ํค ๊ฐ์ ์ ๋ ฅํด์ค๋ค
๋ก์ปฌ์์ ์คํํ ๊ฒฐ๊ณผ( cmd์ flask run ๋ช ๋ น์ด ์คํ)๋ ์ด๋ ๊ฒ ๋ฌ๋ค.
vscode์ sls deploy์์, ๊ฒฐ๊ณผ๊ฐ์ ์ด๋ ๊ฒ ๋ฌ๋ค
๊นํ๋ธ ์ก์ ์ฆ์์๋ ๊ตฌ๋๋๋์ง ํ์ธํ์.
'RestFul API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
instargram ์ฌ์ง ํฌ์คํ API (1) ๊ธฐ๋ณธ ์ธํ (Setting) ํ๊ธฐ (0) | 2024.05.30 |
---|---|
HTTP ์์ฒญ์ ์ํ ๋ณต์กํ ์์ ์ ๋จ์ํํ๋ requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.05.30 |
RestFul API๋ฅผ Serverless Framework๋ก ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.05.23 |
JWT ์ธ์ฆ ํ ํฐ์ ๋ก๊ทธ์ธ ๋ง๋ฃ ์๊ฐ ์ค์ ํ๊ธฐ (0) | 2024.05.22 |
JWT(JSON WEP TOKEN) ์ํธํ ๋ก๊ทธ์์ API ๋ง๋ค๊ธฐ (0) | 2024.05.22 |