【问题标题】:AJAX Using a REST API Without Server Side FrameworkAJAX 使用没有服务器端框架的 REST API
【发布时间】:2010-10-17 03:12:18
【问题描述】:

我正在构建一个基于 REST 的 API(只读)来访问我的应用程序的服务。我计划编写一个 Web 应用程序,该应用程序将利用这些 API 来提供有关应用程序状态的基本信息。我打算使用 AJAX(使用 jQuery)来显示信息。

最初我计划使用 Grails、Spring MVC、RoR 或其中一个 Web 框架来处理我的应用程序的后端。不过,我将提供的 REST API 已经构建在独立的 REST 框架上,因此我只会将 Web 框架用于核心应用程序,而不是业务逻辑。将来,我可能需要服务器端框架来处理其他任务,但目前大部分工作都在 REST API 中完成。

我的问题是,我应该在服务器端使用 Web 应用程序框架吗?我应该能够直接从浏览器从 AJAX 进行我需要的所有 API 调用。我想不出我需要在服务器端做多少事情。让应用程序成为标准的 HTML + AJAX + REST 有意义吗?

【问题讨论】:

    标签: java jquery ruby-on-rails ajax rest


    【解决方案1】:

    如果不真正了解您当前的设置,很难说。你的情况是这样的:

    • 您已经准备好一个包含所有业务逻辑的应用程序。听起来像是用 Java 编写的?
    • 您已经使用其他一些独立框架通过 REST api 编写和公开了服务。这意味着,如果您愿意,您可以立即使用浏览器访问数据,而无需任何额外工作。
    • 您尚未构建 Web 应用程序,但是当您构建时,它将使用 XHR 和 jquery 从 REST api 获取其所有内容。我这么说是因为否则,我认为您已经在使用某种框架来生成其他内容。

    如果我的假设是正确的,那么我会说您不需要额外的框架层。 Grails、RoR、SpringMVC 我使用 ajax,并帮助公开 REST 服务,但它们提供的大部分功能是创建必须在服务器上生成 html、处理表单提交和处理请求中的会话的应用程序的简单方法/响应周期。听起来您不会真的做任何事情,而且它可能会使您的应用程序更加复杂。

    如果您确实需要 rails 等提供的东西,我会说您可能不需要使用 rails 来公开您现在拥有的其余 api。您可以仅将 rails 用于您需要的内容,并继续将您拥有的内容用于 REST api。

    【讨论】:

      【解决方案2】:

      嗯,AJAX 调用需要从某处的服务器中提取数据。如果目标是避免服务器端的复杂设置,CherryPy 可以保持服务器端代码非常小。

      我在下面写了一个简单的例子。第一类是放置 ReST API 逻辑的地方。类下面的代码是启动和运行服务器所需的全部内容。

      安装 Python 2.6,将下面的代码保存到 restExample.py。然后在您的命令行中通过执行“python restExample.py”运行 python 文件。将您的浏览器指向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()
      

      【讨论】:

        【解决方案3】:

        听起来这可能是GWT with Restlet 的一个很好的用例。

        【讨论】:

          【解决方案4】:

          请原谅我自吹自擂,但如果你正在使用 jQuery 做 AJAX REST 的东西,你应该看看我的 JSON-REST 插件:

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

          如果您要恢复 XML,那么这将没有那么有用,但您仍然可以根据您的需要调整一些代码。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-04-10
            • 2016-12-24
            • 2018-07-02
            • 2011-12-18
            • 2013-08-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多