Как вызвать метод запроса на удаление в Yesod?

#rest #haskell #yesod

#rest #haskell #yesod

Вопрос:

В книге по маршрутизации ( http://www.yesodweb.com/book/routing-and-handlers ) там есть абзац:

Отдельный обработчик для каждого метода запроса будет одинаковым, плюс список методов запроса. Все методы запроса должны быть ЗАГЛАВНЫМИ БУКВАМИ. Например, /person/#String PersonR ПОЛУЧАЕТ POST DELETE. В этом случае вам нужно будет определить три функции-обработчика getPersonR, postPersonR и deletePersonR.

Выполнение чего-то вроде

curl -X УДАЛЯЕТ localhost: 3000 / person/1

работает, поэтому сервер способен обрабатывать эти запросы.

Несколько примеров (напримерhttps://github.com/snoyberg/haskellers/blob/master/routes и http://pbrisbin.com/posts/posts_database ) используйте запросы GET или POST (вместо УДАЛЕНИЯ), чтобы справиться с этим.

Есть ли прямой способ вызвать запрос на УДАЛЕНИЕ из Yesod-code? Чтобы вызывался обработчик маршрута deletePersonR ?

Комментарии:

1. Вы не можете напрямую вызвать deletePersonR ?

Ответ №1:

В отличие от методов GET и POST , к которым можно получить доступ с помощью простых ссылок или форм на странице, DELETE методы требуют использования JavaScript и поддерживаются не всеми браузерами. Вот почему POST часто используется вместо этого. Чтобы вызвать DELETE метод из JavaScript, проще всего использовать фреймворк JavaScript, такой как jQuery:

 $.ajax({
  url: "/person/1",
  type: "DELETE",
  success: function(html){
    alert("Ok, deleted");
  }
});
  

Комментарии:

1. Кроме того, если вы создаете этот Javascript с помощью Julius, вы можете использовать типобезопасный URL вместо «/person/1».

2. PSA: Это можно сделать без JavaScript, если вы используете форму с методом POST, кнопкой, стилизованной под ссылку, и переопределением метода из wai-extra пакета.