Идентификатор созданного ресурса не в заголовке ответа
Когда я размещаю новую запись в моей конечной точке, где работает Django REST Framework, ответ 201 не содержит вновь созданный идентификатор /pk записи. Я читал, что служба REST должна содержать ссылку на новый ресурс в Location
заголовок?
Как мне этого добиться?
Я делаю некоторые интеграции и хотел бы иметь возможность запросить вновь созданный ресурс сразу, без лишних слов.
1 ответ
В зависимости от типа используемого вами представления вы можете:
- вручную построить
Response
так что он включает в себя недавно созданный ресурс. - полагаться на
create(request, *args, **kwargs)
предоставленоCreateModelMixin
Я думаю, что самый простой способ достичь того, что вы ищете, это использовать CreateAPIView
, Согласно документации,
Если объект создан, он возвращает ответ 201 Created с сериализованным представлением объекта в качестве тела ответа. Если представление содержит ключ с именем url, то заголовок Location ответа будет заполнен этим значением.
Так что это универсальное представление наверняка возвращает данные в теле каждого ответа, но если вы заинтересованы в получении URL-адреса для каждого из ваших ресурсов, вам, вероятно, стоит взглянуть на HyperlinkedModelSerializer. Эти сериализаторы работают в основном как ModelSerializer
за исключением того, что они включают в себя url
поле в представлении каждого объекта, позволяющее просматривать ресурсы.
Также, если вы заинтересованы только в получении id/pk
я думаю, что каждый созданный объект ModelSerializer
устанавливает id
поле по умолчанию для каждого представления, которое соответствует фактическому pk
в базе данных. Не уверен в этом, но если это не так, вы можете явно запросить его, указав поля для сериализации, а именно
class MySerializer(ModelSerializer):
class Meta:
model = MyModel
fields = ('id', 'name', 'color',)