LINUX.ORG.RU

RESTful API + js клиент

 ,


2

4

cast vertexua

Собственно, господа, выпала тут небольшая левая работенка, наклепать маленький сайтец. Дизайн от заказчика, с меня верстка и бизнес-логика. Все на первый взгляд просто и работы даже с учетом каких-то лютых факапов - месяц, а по ТЗ на все про все 2 месяца времени и старт проекта через пару недель только. Вот и захотелось мне попробовать написать сайт максимально православным способом, то есть RESTful API + клиент на JS+HTML.

За сим хочу поинтересоваться, какие подводные камни, что лучше всего использовать(пользовал Play 2, Django, начал ковыряться с Java EE). Особенно интересно, как в такой связке обходить csrf?

★★★★★
Ответ на: комментарий от Dantix

не обходить, а защищаться, пардон.

Если спрашиваю полную ерунду, заранее прошу прощения за низкий уровень компетентности в данных вопросах.

RedPossum ★★★★★
() автор топика
Последнее исправление: RedPossum (всего исправлений: 2)

На клиенте используй Backbone, оно очень даже рестовое.

На сервере что тебе ближе, для джанги был django bone, кажется он очень ок.

csrf у него очень просто.

var oldSync = Backbone.sync;
Backbone.sync = function(method, model, options){
    options.beforeSend = function(xhr){
        xhr.setRequestHeader('X-CSRFToken', CSRF_TOKEN);
    };
    return oldSync(method, model, options);
};

C1nde
()

Берешь значит Jetty или Apache Tomcat. Потом хватаешь Jersey или RESTEasy. К этому делу добавляешь Guice. Немного Java кода и вуаля! RESTful бэк энд готов.

anonymous
()
Ответ на: комментарий от RedPossum

И да, кастуй вертухая. Он пилит рест сервисы время от времени.

anonymous
()

как в такой связке обходить csrf?

У меня врядли лучше получится рассказать

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_...

За сим хочу поинтересоваться, какие подводные камни, что лучше всего использовать

Тут есть небольшая проблема. А именно

наклепать маленький сайтец

Java

Сколько памяти выделят и какая нагрузка. Если Java дать нормальную VM, то она будет держать хороший лоад. А если там какой-то микро инстанс облачный и 10 пользователей в день, то лучше туда засунуть какой-то Node.js

А теперь уже по делу, если все таки решили делать на Java.

Можно быть ленивым. Взять Java EE 7 в исполнении JBoss AS 7 или уже Wildfly. Wildfly и того меньше. Памяти будет это все есть на холостом ходу 200 МБ, при нагрузке - 300 МБ. Можно взять Glassfish, будет жрать 600 МБ без какой-то практической пользы. Зато можно наклеить на лоб надпись Oracle и онанировать

Подводных камней нет, именно для того и был сделал Java EE чтобы все работало из коробки как часы. Главное вместо того чтобы впиндюрить какой-то фремворк, например Quartz, Spring Batch, нужно посмореть что уже есть в Java EE и оценить хватит ли этого. Было бы круто если бы вы обошлись чистым Java EE, без единой бибилотеки, максимум Guava. Даже логирование вполне можно просто использовать стандартное. Иначе будет просто дублирование большой существующей функциональности с Java EE просто потому что вам захотелось какую-то маленькую фичу.

А вот если вы не ленивый, то можно поиграться связками Grizzly+Jersey+Guice, Netty+Resteasy+Guice. Они будут отличаться только начальным кодом иницализации, а потом будет чистый JAX-RS. Тут проблема с тем, что есть заготовленые классы, которые запускают с небольшим допилом всю связку. А вот чтобы отдать статические файлы, то небольшим допилом не обойдешься, часто нужно хорошенько поколдовать. Но если уж на то пошло, то почему бы не завести на целевой тачке nginx для статики и пропустить в нем один URL дальше на JBoss. Разве что разрабатывать будет сложнее.

Для среднего уровня ленивости - Jetty+Resteasy/Jersey+Guice. Меньше секса, но зато вы тащите с собой сервлетную спецификацию при том что все остальное может работать и без нее. Просто через сервлетную спецификацию заводится с полпинка

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 3)
Ответ на: комментарий от RedPossum

Backbone - очень низкоуровневый и императивный

Knockout - очень простой и декларативный

AngularJS - очень крутой и декларативный.

Вообщем выбор между 2 и 3 в зависимости от желания ботать мануалы. Первый - jQuery 2013 года.

vertexua ★★★★★
()
Ответ на: комментарий от RedPossum

Да, rest он и есть rest, тут уже ничего не придумаешь :)

А вот реализации очень разнятся у backbone и angular, мне ближе первый, возможно просто больше с ним работал.

На самом деле просто пройди по одному туториалу для каждого и смотри что больше нравится. Тут сравнивать весьма сложно, грубо говоря что кому нравится больше.

C1nde
()
Ответ на: комментарий от vertexua

ровнять бекбон и нокаут что письку с пальцем, knockback еще есть

подводный камень по теме — гугл

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 1)

Могу рассказать про джангу. Там есть tastypie, он действительно вкусный. csrf защита из коробки, для аякса токен в куках, на сервер передаётся в заголовках запроса. Любая порядочная библиотека позволяет автоматически подставлять его в каждый аякс запрос.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

юзал tastypie, впечатления положительные. можно еще попробовать flask, на джангу очень похоже только без ощущения тяжести, rest всякий тоже есть в расширениях, flask-restful и т.п., поддерживает разный nosql вроде mongoengine без костылей (джангу так и не завели, по-моему, до сих пор на нем)

trashymichael ★★★
()
Ответ на: комментарий от vertexua

Сколько памяти выделят и какая нагрузка. Если Java дать нормальную VM, то она будет держать хороший лоад. А если там какой-то микро инстанс облачный и 10 пользователей в день, то лучше туда засунуть какой-то Node.js

Да выделят сколько попрошу, в принципе, но пользователей действительно не более 10 в день.

RedPossum ★★★★★
() автор топика
Ответ на: комментарий от trashymichael

поддерживает разный nosql вроде mongoengine без костылей

вот это есть гут.

RedPossum ★★★★★
() автор топика
Ответ на: комментарий от RedPossum

но пользователей действительно не более 10 в день.

Ну тогда тут место Java только с точки зрения поддержки в будущем и вдруг вам понадобятся какие-то хитроумные библиотеки. Иначе пожирание памяти лишнее

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.