#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
пакета.