web-services - ColdFusion中基于REST的网站

标签 web-services rest coldfusion web coldfusion-10

我的公司即将从头开始重新设计一个大项目。我们目前正在考虑如何实现数据提供者。在过去的几个月里,我曾经集成一些 Web 服务,并且非常喜欢以这种方式处理数据。所以我在考虑一个 RESTful 设计。我们将使用带有 REST 支持的 ColdFusion 10,但我实际上不喜欢它所需的组件结构。

最大的优势可能是我们将能够使用 REST 为我们所有的平台提供数据,即:网站、移动网站和 iOS/Android 应用程序。我的安全方法如下:
任何人都可以访问公共(public)数据(显然)。
只能使用 BasicAuth 访问私有(private)数据。
使用 BasicAuth 还允许我们拥有具有不同访问级别的用户角色。授权将是隐式的,并且基于 session /登录。

<!--- server-side example to request customer information (private data, BasicAuth required) --->
<cfset requestedID = 123>
<cfhttp url="/customer/#requestedID#" method="get" username="#APPLICATION.REST_SYSTEMUSER#" password="#APPLICATION.REST_SYSTEMUSER_PW#">
    <cfhttpparam type="url" name="includeAddresses" value="true">
</cfhttp>

<!--- successful response in JSON --->
{
    "ID": 123,
    "FirstName": "John",
    "LastName": "Doe",
    "Birthday": "1970-01-01",
    "BillingAddress": {
        "Receiver": "John Doe",
        "Street": {
            "Name": "Main Street",
            "Number": "13",
            "Addition": ""
        }
        "City": {
            "ZipCode": "AB-123",
            "Name": "Sampletown",
            "District": ""
        }
    },
    "ShippingAddresses": [
    ]
}

<!--- deserialize JSON and build an object to use server-side (the constructor wraps the data and adds functions to it) --->
<cfset customerJSON = deserializeJSON(CFHTTP.FileContent)>
<cfset customer = createObject("component", "Customer").init(customerJSON)>

这里是 问题 我想到了:
  • 将这种通用的 REST 方法用于所有内容是否明智?
    每一页? (在网站上使用 REST 开始是否明智?
    和?)
  • 本地 HTTP 请求是否会影响性能并减慢页面速度
    加载?
  • BasicAuth 是否足以保护数据? (我只会添加次要
    安全功能,例如请求垃圾邮件保护)
  • 是否最好避免在 web 服务中存在依赖关系,例如/customer/访问 /address/接收它的数据?

  • 在其他一些(较旧的)网站上,我们有基于文件的数据提供程序(包括和负责数据库访问等的组件),但我们遇到了一些更复杂的页面(例如结帐过程)的问题,例如名称冲突通过包括,不透明和沉重的组件,混合模型/ View / Controller 元素等。

    最佳答案

    这是我的答案,基于我最近所做的研究。我的公司正在研究新产品的开发,所以我问了很多和你一样的问题。 REST API 不仅支持前端,而且还成为其他应用程序的集成点,这一概念也非常吸引我们。我们为其他产品维护了一个单独的 API,如果您不小心,它很容易与主应用程序失去同步。

  • 使用 REST/单页方法是否明智?当然可以。许多大型网站都是这样工作的。似乎很常见的是一种混合方法,其中服务器可以为初始页面生成 HTML,可能显示 10 种产品),但移动到接下来的 10 种产品将通过 RESTful 调用和客户端呈现。这可能会为您带来最佳的客户体验,但构建两个不同的模板(服务器端模板和客户端模板)的成本很低。根据您的网站的工作方式和使用者,这可能需要也可能不需要。例如,GMail 是一个单页应用程序,但它是一个应用程序,您可以容忍它花几秒钟的时间向您显示加载栏,而在运行零售网站时,这种延迟可能是 Not Acceptable 。
  • 本地请求会减慢加载速度吗?您的意思是让您的网站进行 REST 调用以获取其数据,而不是直接访问数据库吗?在这种情况下,它会增加一些延迟,因为涉及到一个额外的网络跃点,但在一个设置良好的系统和部署中,我认为这种延迟可能是可控的。
  • HTTP 基础。我只会通过 HTTPS 考虑它。它只是通过 HTTP 不够安全。我在下面链接到的演示文稿中对此进行了介绍。
  • 相关数据。我也想知道这一点。我非常有帮助的是观看 presentation from StormPath ,其中涵盖了实现 RESTful API 时的许多问题和良好实践。它们涵盖了一种链接数据的方法(遵循 HATEOAS 原则)以及实体扩展,因此 GET 到 /customers/ID123?expand=address将返回客户的表示,但嵌入了他们的地址,这是避免多次往返以获取所需的所有数据的好方法。

  • 关于 CF10 的 REST 支持。我看着它,并没有那么热衷于它是如何工作的。我可能误解了它,但 REST 应用程序似乎与您尝试混合的任何类型的常规应用程序非常分离。 Railo 的实现看起来非常相似,但略有不同。当然,构建一个适用于两者的 REST 应用程序似乎相当棘手。你看过Taffy有吗?我没有,但会对它的工作原理感兴趣。

    因为 REST 是一种架构风格,而不是一个严格的标准,所以对于你如何实现事物有很大的自由度,以及关于“最佳”方法的辩论/争论的空间很大

    关于web-services - ColdFusion中基于REST的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595442/

    相关文章:

    web-services - 为什么 Web 服务安全需要单独的标准?

    sql - SQL Azure 上超时已过期;无法在本地 SQL Server 上重现

    iis - Coldfusion - 避免特定文件的 IIS 404.0 错误并改为手动路由

    c# - 以编程方式控制 xml 元素的顺序

    javascript - Web 方法返回 OK 但触发失败功能

    c# - System.Web.Services.Protocols.SoapHeaderAttribute.Required 已过时 我现在应该使用什么?

    c# - ASP.NET Core 6 - 如何在不反序列化的情况下通过 MapPost() 获取 JSON 输入?

    c# - 在 Android 手机的 REST 服务中找不到端点

    sql-server - 使用 ColdFusion 将日期时间(毫秒)插入 MSSQL 数据库

    memory-leaks - Coldfusion.util.Key 内存泄漏 - 结构键问题?