Notice
Recent Posts
Recent Comments
Link
오늘도 개발
[1차 프로젝트 록차] 상품 목록 GET api 제작기 1 - RESTful한 엔드포인트 만들기 본문
이번주부터 다음주까지 녹차 쇼핑몰 클론코딩을 팀별로 진행하고 있다.
지금은 상품 목록 데이터를 응답하는 api를 담당해서 만들고 있다.
오늘은 RESTful api에 대해 공부했는데
지금 내가 작업하는 api도 더 RESTful하게 바꿔보고 싶어졌다.
그래서 원래 path parameter를 사용해서 다음과 같이 엔드포인트를 만들었는데
/products/1/2
# /products/첫번째 카테고리 아이디/두번째 카테고리 아이디
query parameter를 사용해서 다음과 같이 좀 더 RESTful하게 수정해보았다.
/products/list?category=1
첫 번째 엔드포인트가 더 RESTful하지 않다고 생각한 이유는 두 가지가 있다.
1) 첫번째 엔드포인트는 self-descriptive하지 않다.
=> 부연설명을 하지 않으면 엔드포인트의 목적을 알 수 없다.
2) 상품 중 특정 카테고리에 속한 것만 필터링하는 기능이므로 path parameter가 어울리지 않는다.
두 번째 엔드포인트는 장고에서 다음과 같이 구현했다.
<urls.py>
쿼리 파라미터로 들어갈 ?key=value 부분은 작성하지 않는다.
from django.urls import path
from products.views import ProductListView
urlpatterns = [
path('/list', ProductListView.as_view())
]
<httpie>
?를 넣으면 오류가 나므로 다음과 같이 작성한다.
http -v GET 127.0.0.1:8000/products/list category==1
# 127.0.0.1:8000/products/list?category=1 로 변환됨
<views.py>
request.GET[]에 query 파라미터의 키 값(category)을 넣으면 값을 얻을 수 있다.
class ProductListView(View):
def get(self, request):
# request.GET[]에 query 파라미터의 키 값(category)를 넣으면 값을 얻을 수 있다.
products = Product.objects.filter(second_category_id=request.GET['category'])
result = []
for product in products:
result.append({
'id' : product.id,
'title' : product.title,
'price' : product.price,
'stock' : product.stock,
'thumbnail_images': [image.url for image in product.thumbnail_images.all()],
'types' : [type.name for type in product.types.all()]
})
return JsonResponse({'result': result}, status=200)
참고
'TIL & 프로젝트 회고' 카테고리의 다른 글
| [1차 프로젝트 록차] 상품 목록 GET api 제작기 3 - Django Q 오브젝트 사용하기 (0) | 2022.07.22 |
|---|---|
| [1차 프로젝트 록차] 상품 목록 GET api 제작기 2 - 어떻게 필터링을 구현할까 (0) | 2022.07.21 |
| [Westagram] 2. 회원가입, 로그인, 팔로잉 구현으로 배운점 (0) | 2022.07.17 |
| [Westagram] 1.Github 사용으로 느낀점 (0) | 2022.07.17 |
| [Westagram] 잘못된 로그인 시도 시 발생하는 에러 (0) | 2022.07.08 |