我们正在使用 django Rest Framework 开发一个安息的API,我们决定处理外国键,例如:
GET https://url_to_api/api/v2/foo/1:
{
"id": 1,
"bar": "https://url_to_api/api/v2/bar/6/",
"baz": "https://url_to_api/api/v3/baz/4/"
}
这是 foo的ID 1 的GET请求。
django rest框架将URL返回到V2与bar实体的关系,因为/api/v2/bar/6/
发送到仅此版本使用的视图,但它将URL返回到V3(https://url_to_api/api/api/api/v3)/baz/4/)与BAZ实体的关系,因为它的视图与V2的视图相同,而Django Rest框架反向引擎返回了发送到同一视图的URL的第一个结果。
我对此行为有几个问题:
- 是正常行为,还是我们缺少或做错了什么?
- 将发送到API的不同版本的URL是否很好?
关于如何管理此问题的其他想法?
这是DRF中的正常行为。因此,您可以像这样指定,或者您为所有内容指定自定义。
# bookings/urls.py
urlpatterns = [
url(r'^$', bookings_list, name='bookings-list'),
url(r'^(?P<pk>[0-9]+)/$', bookings_detail, name='bookings-detail')
]
# urls.py
urlpatterns = [
url(r'^v1/bookings/', include('bookings.urls', namespace='v1')),
url(r'^v2/bookings/', include('bookings.urls', namespace='v2'))
]
以获取进一步的参考,请参阅此