gpt4 book ai didi

web-services - 在 Grails 应用程序中实现 REST API

转载 作者:行者123 更新时间:2023-12-03 10:08:25 24 4
gpt4 key购买 nike

我想知道让 Grails 应用程序提供可由 Web 服务使用的 RESTful API(主要是一些 CRUD 操作)的最佳方法是什么,例如当您想为基于浏览器的应用程序或其他任何应用程序构建相应的 iOS 应用程序时。

我想在我的 Grails 应用程序中构建一个单独的部分,它接受来自 www.mywebapp.com/api/someAction 的调用。这样我就可以重用服务层。那么我将如何进行 URL 映射?只有一大 ApiController听起来不是很时髦。

或者有没有我不知道的更好的方法?这种做法必须支持像 OAuth 这样的东西来验证调用 Web 服务的用户。

最佳答案

Grails 绝对可以提供 REST api,但这样做的难度取决于 mature (也就是 RESTful)你希望 API 是怎样的。

基本休息

获得 RESTfullness 的基本级别,您可以使用完整的 HTTP 动词和利用 HTTP 响应代码来操作资源的 json 或 xml 表示,这非常容易。有 3 个主要部分来实现这一点:

  • URL mapping

    这是我如何在最近的项目中编写 URL 映射以允许更多 RESTful URL 的示例:
    // RESTful list mapping
    name restEntityList: "/$controller"(parseRequest: true) {
    action = [GET: "list", POST: "save"]
    }

    // RESTful entity mapping
    name restEntity: "/$controller/$id"(parseRequest: true) {
    action = [GET: "show", PUT: "update", POST: "update", DELETE: "delete"]
    constraints {
    id matches: /\d+/
    }
    }
  • Content negotiation

    Grails 处理内容协商的 3 种不同方式使该框架非常灵活,允许您支持更广泛的客户端,这些客户端可能无法设置 Accept HTTP header 等内容。

    您可以使用 withFormat 使用内容协商以不同的方式响应不同的请求。根据客户表明他们想要的内容进行阻止。这种强大的能力也可以用来对你的 API 进行版本控制,就像 Github does 一样。 .
  • Response status

    HTTP 已经内置了一个很好的响应机制,允许您利用架构中的先天能力,如可缓存性和幂等操作。虽然某些 Web 浏览器不能很好地处理某些响应代码,但使用您的 API 的客户端应用程序可以使用它们来大大简化其内部代码。

  • 干休

    使您的应用程序保持 RESTful 并同时保持 DRY 的最佳方法之一是尽可能多地利用 Controller 脚手架,因为所有域对象的 CRUD 本质上都是相同的。 This article使默认 Controller 更加 RESTful,以及 this article简化默认 Controller 是从脚手架获得更多动力的重要资源。

    高级休息

    一旦你达到了这一点,你的 grails 应用程序就有了一个非常实用的 REST API。您可以执行所有基本的 CRUD 操作,并且资源很容易使用。

    然而,通往真正的 RESTful 超媒体 API 的阶梯的下一个级别更难实现。解决这个问题是 Grails 的路线图,但目前相当痛苦。这些作品是:
  • 超媒体资源
  • 内容类型
  • 版本控制

  • 谢天谢地,还有 a plugin这使得定义自定义编码器变得非常容易,这使我们能够相当轻松地涵盖 REST 难题的其余三个部分。

    最后,还有保护整个事物的方面。一般来说, Spring Security就保护用户对您的 api 的访问而言,这将使您处于有利地位。由于大多数 API 访问来自应用程序,而不是用户可见,因此基本或摘要式身份验证通常是最简单的方法。有一个 OAuth plugin建立在 Spring Security 之上。我没有亲自使用它,所以我不能保证它的稳定性,但对我来说它看起来很不错。

    总的来说,Grails 足够灵活和强大,可以非常非常好地执行 REST,但尚未完成工作使其开箱即用地执行 REST。

    关于web-services - 在 Grails 应用程序中实现 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932670/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com