시작하며
API에서 header
을 이용하면 고급 인증 방식을 쓸 수 있습니다. 또한, request
모듈에서 POST, PUT, DELETE
를 사용할 수 있습니다.
GET, POST, PUT, DELETE
GET
: 외부 시스템에 특정한 데이터를 요청합니다.POST
: 외부 시스템에 데이터를 전송합니다. 전송의 성공 유무만 중요하고, 이에 대한 응답은 중요하지 않습니다. 데이터를 게시할 때 많이 사용합니다.PUT
: 데이터를 업데이트합니다.DELETE
: 외부 서비스의 데이터를 삭제합니다.
습관 추적기 프로젝트
이 사이트를 이용해서 습관 추적기를 만들어보겠습니다. 해당 서비스의 API 문서를 보면, 아래와 같이 코드를 짤 수 있습니다.
from dotenv import load_dotenv
import os
import requests
load_dotenv()
if __name__ == '__main__':
pixela_endpoint = 'https://pixe.la/v1/users'
user_params = {
"token": os.getenv('PIXELA_TOKEN'),
"username": "reo91004",
"agreeTermsOfService": "yes",
"notMinor": "yes",
}
r = requests.post(url=pixela_endpoint, json=user_params)
print(r.text)
>>> {"message":"Success. Let's visit https://pixe.la/@reo91004 , it is your profile page!","isSuccess":true}
여기서 아이디가 uername
, 비밀번호가 개인의 토큰이 된다. 여기서 보안을 강화하기 위한 방법이 있습니다. 우선 그래프를 만들어 보겠습니다.
Graph 생성
Graph 생성 단계로 이동하면 API를 사용하는 방법이 나옵니다.
graph_endpoint = f"{pixela_endpoint}/{USERNAME}/graphs"
graph_config = {
'id': 'graph1',
'name': 'Step Tracking Graph',
'unit': 'Km',
'type': 'float',
'color': 'sara',
}
r_graph = requests.post(url=graph_endpoint, json=graph_config)
print(r_graph.text)
허나 이렇게만 실행하면 에러가 발생합니다. 이는 Request Header
를 기입하지 않았기 때문입니다.
HTTP 헤더 인증
헤더란, 정보가 담겨 있는 부분을 의미합니다. 예를 들어 웹사이트를 생각하면, 헤더 부분은 정보가 변하지 않지만 (웹사이트의 로고, 위의 디자인, 카테고리) 몸체 부분의 내용은 바뀝니다.
지금까지 해왔던 API Key 인증 방식으로는, 요청을 처리할 때 요청 자체에 Key나 Token이 있으므로 보안에 굉장히 취약합니다. 이를 해결하기 위해 HTTP 헤더를 이용할 수 있습니다.
사실, 요청에 API Key가 있어도 암호화되어 있습니다! 주소에서 맨 앞에
https
에서s
가secure
을 의미하기 때문입니다. 그러나 요청 자체에 Key가 있다는 사실은 변하지 않으므로 직접 요청하는 주체에서 갈취당할 수도 있습니다.
graph_endpoint = f"{pixela_endpoint}/{USERNAME}/graphs"
graph_config = {
'id': 'graph1',
'name': 'Step Tracking Graph',
'unit': 'Km',
'type': 'float',
'color': 'sora',
}
headers = {
'X-USER-TOKEN': TOKEN,
}
r_graph = requests.post(url=graph_endpoint, json=graph_config, headers=headers) # 여기서 headers는 키워드 인자이기 때문에 직접 보여지지 않는다.
print(r_graph.text)
>>> {"message":"Success.","isSuccess":true}
참고 : Developer Interface — Requests 2.31.0 documentation
이제 https://pixe.la/v1/users/reo91004/graphs/graph1.html로 접속하면 개인의 습관 추적기가 나옵니다.
습관 추가하기
pixel_post_endpoint = f"{pixela_endpoint}/{USERNAME}/graphs/{ID}"
pixel_post_config = {
'date': datetime.now().strftime("%Y%M%d"),
'quantity': '5000',
}
r_pixel = requests.post(url=pixel_post_endpoint, json=pixel_post_config, headers=headers)
print(r_pixel.text)
datetime
모듈을 이용해 자동으로 오늘 날짜를 가져온 다음, API에 적힌 방법대로 POST를 수행하면 위 사이트 픽셀에 색이 칠해지며 수치가 올라가게 됩니다.
습관 수정하기
update_endpoint = f"{pixela_endpoint}/{USERNAME}/graphs/{ID}/20240101"
new_pixel_data = {
'quantity': '5',
}
r_update = requests.put(url=update_endpoint, json=new_pixel_data, headers=headers)
print(r_update.text)
위에서 5000km
를 걸었다고 넣었기 때문에, 이를 5km
로 수정하는 과정입니다. quantity
만 수정하면 됩니다.
부록
참고문헌
'◎ Python > Udemy Python' 카테고리의 다른 글
Day 039 - 항공권 가격 추적 프로젝트 (0) | 2024.03.08 |
---|---|
Day 038 - 구글 시트에 운동 기록 (1) | 2024.03.08 |
Day 036 - 주식시장 알림 프로젝트 (1) | 2024.03.08 |
Day 033 - API 활용 (1) | 2024.03.08 |
Day 032 - SMTP와 Datetime 활용 (2) (0) | 2024.03.08 |
자기계발 블로그