基于RESTF的ColdFusion网站

Ale*_*lex 6 rest coldfusion web-services web coldfusion-10

我的公司即将从头开始重新设计一个大项目.我们目前正在考虑如何实现数据提供程序.我过去几个月曾经整合过一些网络服务,就像用这种方式处理数据一样.所以我在考虑一个RESTful设计.我们将使用REST支持附带的ColdFusion 10,但实际上我并不喜欢它所需的组件结构.

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

<!--- 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)>
Run Code Online (Sandbox Code Playgroud)

以下是我想到的问题:

  1. 对每个页面上的所有内容使用这种通用REST方法是否明智?(在网站上使用REST是否很聪明?)
  2. 本地HTTP请求是否会影响性能并降低页面加载速度?
  3. BasicAuth是否足以保护数据?(我只是添加一些小的安全功能,例如请求垃圾邮件保护)
  4. 是否最好避免在Web服务中具有依赖性,例如 /customer/访问/address/以接收其数据?

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

bar*_*nyr 4

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

  1. 使用 REST/单页方法是否明智?当然可以。许多大型网站都是这样工作的。似乎常见的是一种混合方法,其中服务器可以为初始页面生成 HTML,可能会显示 10 个产品),但移动到接下来的 10 个产品将通过 RESTful 调用并进行客户端渲染。这可能会为您带来最佳的客户体验,但需要构建两个不同的模板(服务器端模板和客户端模板),但成本微乎其微。根据您的网站的工作方式以及使用它的用户,这可能需要也可能不需要。例如,GMail 是一个单页应用程序,但它是一个应用程序,您可以容忍它花几秒钟向您显示加载栏,而运行零售网站时,这种延迟可能是不可接受的。

  2. 本地请求会减慢加载速度吗?您的意思是让您的网站进行 REST 调用来获取数据,而不是直接访问数据库吗?在这种情况下,它会增加一些延迟,因为涉及额外的网络跃点,但在设置良好的系统和部署中,我认为延迟可能是可以管理的。

  3. HTTP 基础。我只会考虑通过 HTTPS。它只是通过 HTTP 不够安全。我在下面链接的演示文稿中对此进行了介绍。

  4. 相关数据。我也想知道这一点。我觉得非常有帮助的是观看StormPath 的演示,其中涵盖了实现 RESTful API 时的许多问题和良好实践。它们涵盖了链接数据的方法(遵循 HATEOAS 原则)以及实体扩展,因此 GET 将/customers/ID123?expand=address返回客户的表示,但嵌入了他们的地址,这是避免多次往返以获取所有信息的好方法。您需要的数据。

关于CF10的REST支持。我看了看它,并不太关心它是如何工作的。我可能误解了它,但 REST 应用程序似乎与您尝试混合的任何类型的常规应用程序非常分开。Railo 的实现看起来非常相似,但有一些细微的不同。当然,构建一个适用于两者的 REST 应用程序似乎相当棘手。你看过太妃糖吗?我没有,但对它的工作原理很感兴趣。

因为 REST 是一种架构风格,而不是严格的标准,所以具体如何实现事物有很大的自由度,并且关于“最佳”方法的辩论/争论有很大的范围