gpt4 book ai didi

python - 从第三方 api 返回项目列表的 DRF 方式是什么?

转载 作者:行者123 更新时间:2023-12-04 16:29:44 24 4
gpt4 key购买 nike

我有一个端点,我需要向第三方 API 发出请求以获取项目列表并将结果返回给客户端。

以下哪种方法或任何其他方法更适合 DRF?

  1. 进行输入参数验证和调用第三方API,并在view方法中,将响应中的item列表传递给序列化器进行序列化,并将序列化器数据返回给客户端
  2. 将请求参数作为只写字段传递给序列化器,在序列化器中进行字段验证、api调用和序列化
  3. 1 和 2 的混合;使用 2 个不同的序列化器,一个将请求参数作为只写字段,验证输入参数并向 3rd 方 api 发出请求,另一个序列化器从第一个序列化器获取结果列表并序列化项目以供客户端使用<

最佳答案

由于您的问题没有提及将数据写入数据库,因此毫无疑问您可以使用 Method-1。

让我们看看这个sample api ,它返回一个项目列表(一个列表api)。

案例 - 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 :如果您不需要完整的数据,但需要很少的部分(idbody)
在这种特殊情况下,您可以使用 pythonic 循环或 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 灵活足以获得所需的输出格式以及将数据输入系统。简而言之,这完全取决于您的要求

关于python - 从第三方 api 返回项目列表的 DRF 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52259092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com