2016-11-03 2 views
0

Я пытаюсь использовать PrimeNG datatable и имеет некоторые функции сортировки и фильтрации. Я хочу отправить данные поиска/фильтра в мой успокоительный api, но я не могу решить, как это сделать.Как отправить фильтры и отсортировать информацию в Angular2?

Данные:

{ 
    "event": { 
     "first": 0, 
     "rows": 10, 
     "sortField": "isDone", 
     "sortOrder": 1, 
     "filters": { 
      "title": { 
       "value": "a", 
       "matchMode": "startsWith" 
      }, 
      "details": { 
       "value": "d", 
       "matchMode": "startsWith" 
      } 
     } 
    } 
} 

HTTP-служба не позволяет передавать данные в RequestBody с ГЭТ. Я думаю, что отправка данных с помощью http post противоречит стандартам REST. Решение, которое я нашел, заключается в том, чтобы поместить данные в URL-адрес, но мои коллеги не принимаются, и они считают, что отправка с помощью HTTP-сообщения лучше.

Какая практика? Как отправить данные? Прием его с помощью http-сообщения является приемлемым?

ответ

3

В вашем примере вы говорите о параметрах запроса/фильтра. Это нормально отправить их с помощью запроса GET. Обычно, если вы пытаетесь получить ресурсы через REST API, вы должны использовать GET, а не POST.

Конечно, если API - это тот, который вы строите самостоятельно, вы также можете выбрать POST. Если вы сделаете это, вы создадите конечную точку фильтра/поиска, к которой вы можете отправить (набор) фильтров. Это часто делается в случае более сложных поисков, в этом случае вы в основном делаете поиск/фильтр ресурсом. Таким образом, вы получили бы такую ​​конечную точку: /event/filter, где вы могли бы отправить свой запрос POST с помощью фильтра

Другой вариант - добавить псевдоним для общего поиска и по-прежнему использовать запрос GET. Тогда конечная точка может lõoke как это вместо:

/event/doneEvents?title=a&details=d&top=10 

в конце концов, есть более чем один способ решения этой проблемы, и ПОСТ, безусловно, приемлемо для более сложных запросов. Более важная часть при построении API должна быть последовательной, поэтому, независимо от выбора, придерживайтесь ее для любых других сложных поисков, которые появляются.

Однако вы не первый, кто задал этот вопрос, и для получения дополнительной информации об этом я хотел бы указать вам here (stackoverflow), here (software engineering stackexchange) или here (blog).