我是Django REST框架的初学者,需要您的建议。我正在开发一个Web服务。该服务必须为其他服务提供REST接口。我需要实现的REST接口不能直接与我的模型一起工作(我指的是get、put、post、delete操作)。它向其他服务提供一些计算结果,在收到请求时,我的服务进行一些计算并返回结果(不将结果存储在自己的数据库中)。
下面是我对如何实现REST接口的理解。如果我错了,请纠正我。
- 创建进行计算的类。将其命名为'CalcClass'。CalcClass在其工作中使用模型。
- 计算所需的参数传递给构造函数。
- 实现计算操作。它将结果返回为“ResultClass”。
- 创建结果类。
- 从对象派生。
- 它只是拥有包含计算结果的属性。
- 计算结果的一部分被表示为元组的元组。据我所知,为这些结果实现一个单独的类并将此类对象的列表添加到ResultClass中,对于进一步的序列化来说会更好。
- 为ResultClass创建序列化程序。
- 从序列化程序派生。序列化程序。
- 计算结果是只读的,因此对于字段主要使用Field类,而不是专用类,如IntegerField。
- 我不应该在ResultClass和Serializer上实现保存()方法,因为我不打算存储结果(我只想在请求时返回它们)。
- 嵌套结果的Impl序列化程序(记住上面提到的元组的元组)。
- 创建视图以返回计算结果。
- 从APIView派生。
- 只需获取()。
- 在get()中,使用从请求中检索到的参数创建CalcClass,调用其calc(),获取ResultClass,创建串行化器并将ResultClass传递给它,返回Response(serializer.data)。
- 网址
- 在我的例子中没有API根。我应该只有网址来获得各种计算结果(带diff参数的计算)。
- 为API浏览添加调用format_suffix_patterns。
我错过了什么吗?这个方法总体上是正确的吗?
1条答案
按热度按时间kwvwclae1#
Django-rest-framework即使没有绑定到模型上也能很好地工作。你的方法听起来不错,但是我相信你可以减少一些步骤来让一切正常工作。
例如,rest framework自带了一些内置的渲染器,它可以将JSON和XML返回给API消费者,你也可以通过安装python模块来启用YAML,Django-rest-framework可以输出任何基本的对象,如dict,list和tuple,而不需要你做任何额外的工作。
所以基本上你只需要创建一个函数或者类来接收参数,完成所有需要的计算,然后把结果以元组的形式返回给REST API视图。如果JSON和/或XML符合你的需要,django-rest-framework会为你处理序列化。
在这种情况下,您可以跳过步骤2和3,只使用一个类进行计算,另一个用于向API使用者表示。
下面是一些片段可能会帮助你:
请注意,我没有测试过这个。这只是一个例子,但它应该工作:)
计算类:
REST视图:
您的urls.py:
当你访问http://example.com/api/v1.0/resource/?format=json时,这段代码应该输出一个列表列表。如果使用后缀,你可以用
.json
替换?format=json
。你也可以通过在头中添加"Content-type"
或"Accept"
来指定你想要得到的编码。