AJAX с использованием REST API без серверной инфраструктуры - PullRequest
4 голосов
/ 02 апреля 2009

Я создаю API на основе REST (только для чтения) для доступа к службам моего приложения. Я планирую написать веб-приложение, которое будет использовать эти API для предоставления базовой информации о состоянии приложения. Я планирую использовать AJAX (используя jQuery) для отображения информации.

Изначально я планировал использовать Grails, Spring MVC, RoR или одну из веб-фреймворков для обработки серверной части моего приложения. API-интерфейсы REST, которые я буду предоставлять, уже построены на стандартном REST-фреймворке, поэтому я буду использовать только веб-фреймворк для основного приложения, а не бизнес-логику. В будущем мне может понадобиться серверная структура для выполнения других задач, но сейчас большая часть работы выполняется в API REST.

У меня вопрос, стоит ли беспокоиться об использовании инфраструктуры веб-приложений на стороне сервера? Я должен быть в состоянии сделать все необходимые вызовы API из AJAX прямо из браузера. Я не могу придумать, что мне нужно сделать на стороне сервера. Имеет ли смысл иметь стандартное приложение HTML + AJAX + REST?

Ответы [ 4 ]

4 голосов
/ 02 апреля 2009

Трудно сказать, не зная больше о вашей текущей настройке. Вот как звучит ваша ситуация:

  • У вас уже есть готовое приложение со всей бизнес-логикой. Похоже, написано на Java?
  • У вас уже есть службы, написанные и предоставленные через API REST с использованием какой-либо другой автономной среды. Это означает, что если вы хотите, вы можете получить доступ к данным прямо сейчас с помощью браузера без каких-либо дополнительных действий.
  • Вы еще не создали веб-приложение, но когда вы это сделаете, оно получит весь свой контент из API REST, используя XHR и jquery. Я говорю это, потому что в противном случае я бы подумал, что вы уже используете какую-то платформу для генерации другого контента.

Если я прав в своих предположениях, то я бы сказал, что вам не нужен дополнительный каркасный слой. Grails, RoR, SpringMVC могут использовать ajax и помогают в раскрытии сервисов REST, но большая часть того, что они предоставляют, - это простой способ создать приложение, которое должно генерировать html на сервере, обрабатывать отправку форм и обрабатывать сеансы в запросе. / цикл ответа. На самом деле это не похоже на то, что вы будете делать что-то подобное, и, вероятно, сделает ваше приложение более сложным.

Если вы когда-то нуждались в вещах, которые предоставляют рельсы и т. Д., Я бы сказал, что вам, возможно, не нужно использовать рельсы, чтобы выставить остальные apis, которые у вас есть сейчас. Вы можете использовать рельсы только для того, что вам нужно, и продолжать использовать то, что у вас есть для API REST.

0 голосов
/ 12 августа 2009

Простите, что у меня есть собственный рог, но если вы делаете AJAX REST с помощью jQuery, вам, вероятно, стоит проверить мой плагин JSON-REST:

http://plugins.jquery.com/project/rest

Если вы получаете XML обратно, это будет не так полезно, но вы все же сможете адаптировать часть кода под свои нужды.

0 голосов
/ 17 апреля 2009

Похоже, это может быть хорошим вариантом использования для GWT с Restlet .

0 голосов
/ 02 апреля 2009

Хорошо, вызовы AJAX должны получать данные с сервера где-нибудь. Если цель состоит в том, чтобы избежать сложной настройки на стороне сервера, CherryPy может сохранить код на стороне сервера ОЧЕНЬ маленьким.

Я написал простой пример ниже. Первый класс - это место, где вы размещаете логику для своего API ReST. Код ниже класса - это все, что вам нужно для запуска и запуска сервера.

Установите Python 2.6, сохраните приведенный ниже код в restExample.py. Затем в командной строке запустите файл python, выполнив «python restExample.py». Направьте ваш браузер на http://localhost:8080/blog/999 и увидите, как возвращается JSON.

import cherrypy
import json

# Create the controller
class Blog_Controller(object):
    def get(self, entryID):
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps({'title':'Entry Title from DB', 'entry_text': 'Text From DB'})
    def update(self, entryID, titleFromPOSTFormInput, textFromPOSTFormInput):
        # Update DB with passed in arguments.  entryID comes from URL,
        # other two entries come from POST
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return json.dumps({'success':True})

# Setup URL routes
d = cherrypy.dispatch.RoutesDispatcher()
d.connect(name='blog_entry', route='blog/:entryID', action='get',
          controller=Blog_Controller(),
          conditions={'method': ['GET']})
d.connect(name='blog_entry', route='blog/update/:entryID', action='update',
          controller=Blog_Controller(),
          conditions={'method': ['POST']})
config = { '/' : { 'request.dispatch': d } }
cherrypy.tree.mount(root=None, config=config)

# Start the webserver
engine = cherrypy.engine
try:
    engine.start()
except:
    sys.exit(1)
else:
    engine.block()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...