Поскольку в вашем вопросе ничего не говорится о записи данных в БД , несомненно, вы можете перейти к методу-1.
Давайте рассмотрим этот пример API , который возвращает список элементов (список API).
Case - 1 : Нам нужно показать тот же ответ, который мы получили от стороннего API
В этом случае нам не нужен сериализатор или процесс сериализации, все, что нам нужно, это передать данные от стороннего API клиенту.
from rest_framework.decorators import api_view
from rest_framework.response import Response
import requests
@api_view()
def my_view(request):
tp_api = "https://jsonplaceholder.typicode.com/posts"
response = requests.get(tp_api)
return Response(data=response.json())
Дело - 2 : если вам не нужны полные данные, но мало частей (id
и body
)
В этой конкретной ситуации вы можете использовать питоническую петлю или сериализатор DRF.
<b># using DRF serializer</b>
from rest_framework import serializers
# serializer class
class Myserializer(serializers.Serializer):
id = serializers.CharField()
body = serializers.CharField()
@api_view()
def my_view(request):
tp_api = "https://jsonplaceholder.typicode.com/posts"
response_data = requests.get(tp_api).json()
my_serializer = Myserializer(data=response_data, many=True)
my_serializer.is_valid(True)
return Response(data=my_serializer.data)
<b>#Python loop way</b>
@api_view()
def my_view(request):
tp_api = "https://jsonplaceholder.typicode.com/posts"
response_data = requests.get(tp_api).json()
data = [{"id": res['id'], "body": res['body']} for res in response_data]
return Response(data=data)
В case-2 я бы рекомендовал использовать сериализатор DRF, который выполняет множество функций, таких как проверка и т. Д.
При втором подходе проверка входных данных будет зависеть от ваших требований. Как вы сказали в комментариях, вам нужно предоставить некоторые входные данные для стороннего API. Таким образом, проверка должна должна быть выполнена перед доступом к стороннему API
# Validation example
class MyInputSerializer(serializers.Serializer):
postId = serializers.IntegerField(max_value=10)
class MyOutputSerializer(serializers.Serializer):
id = serializers.CharField()
body = serializers.CharField()
@api_view()
def my_view(request):
input = MyInputSerializer(data=request.GET)
input.is_valid(True)
tp_api = "https://jsonplaceholder.typicode.com/comments?postId={}".format(input.data['postId'])
response_data = requests.get(tp_api).json()
my_serializer = MyOutputSerializer(data=response_data, many=True)
my_serializer.is_valid(True)
return Response(data=my_serializer.data)
Заключение * * тысяча пятьдесят-одна
DRF гибкий достаточно для получения желаемого выходного формата, а также для ввода данных в систему. Короче говоря, все зависит от ваших требований