Параметры фильтра REST API в теле ответа - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь отобразить оставшиеся возможные параметры фильтра для конечной точки REST на основе уже установленных фильтров.

Существует ли какая-либо рекомендация по разработке REST API для сообщить клиенту об оставшихся вариантах?

Что-то подобное пришло на ум.

{
  "count": 131,
  "next": "2",
  "previous": null,
  "filters": {
    "status": [
      1,
      2,
      99
    ],
    "...": [
      "..."
    ]
  },
  "results": [
    {
      "id": 1,
      "status": 1,
      "...": ".."
    },
    {
      "id": 1,
      "status": 2,
      "...": "...."
    }
  ]
}

1 Ответ

0 голосов
/ 24 марта 2020

Лучший способ сообщить пользователю, какие фильтры могут быть добавлены к конечной точке, - это создать документацию API с помощью Swagger или Redo c.

* 1006. * Чтобы клиенты знали, какие фильтры они могут добавить для конечной точки, вы отправляете им документацию, где они могут точно узнать, как ее можно использовать.

У вас есть другой конкретный вариант использования, для которого вы хотите отправить их в ответе?

Если вам необходимо обязательно отправить фильтры в теле, вы можете создать FilterMixin и поместить его на все ViewSets, где вы хотите использовать эту функцию, и перезаписать list функция. Примером может быть что-то вроде этого:

class FiltersMixin:
    def list(self, request, *args, **kwargs):
        data = super().list(request, *args, **kwargs)
        remaining_filters = list(set(self.filter_fields) - set(self.request.query_params.keys())
        return {"filters": remaining_filters, **data}

Это работает, если фильтры в наборе добавлены в ViewSet с использованием свойства filter_fields.

...