REST GET函数 - 将结构返回为JSON

时间:2013-07-01 07:44:07

标签: coldfusion coldfusion-10

我是Coldfusion的绝对新手(到目前为止1天),我必须在工作中学习它。我来自.NET背景,所以我试图理解这一切。

我基本上只是希望 读取XML文件,并将其作为JSON返回。简单。

XML文件结构

<countries>
    <country code="AU" name="Australia" />
    <country code="NZ" name="New Zealand" />
    <country code="US" name="United States" />
    <country code="UK" name="United Kingdom" />
</countries>

我已经创建了一个REST服务,我正在使用cfscript使用CFC。代码:

component restpath="locations" rest="true"
{
    remote Array function getCountries() httpmethod="GET"
    {
        response = [];
        xCountries = xmlParse(expandPath("/data/countries.xml"));
        numItems = ArrayLen(xCountries.countries.XmlChildren);

        for (i = 1; i LTE numItems; i++) 
        {
            sCountries = StructNew();
            sCountries.code = xCountries.countries.country[i].XmlAttributes.code;
            sCountries.name = xCountries.countries.country[i].XmlAttributes.name;
            arrayAppend(response, sCountries);
        }

        return response;
    }
}

使用这种技术,我在测试中得到了正确的响应,但我有这种奇怪的感觉,它可能效率低下。我只是想创建一个新结构并将其添加到一个循环中的数组(完整的xml文件约为100个项目)可能很笨重。

事实上,我不确定使用结构是否是最好的方法。在.NET中,我已经创建了一个类,然后在它的属性中添加了东西。我去寻找类似于类的东西,我遇到了一些东西,我创建了一个Countries.cfc文件:

component accessors="true" output="false"
{
    property name="code" type="string";
    property name="name" type="string";
}

我遇到的唯一问题是,我不知道如何使用它。你是否使用这样的组件进行OOP?或者上面的“结构”方法更好吗?

TL; DR ;以上是实现这一目标的最佳方法吗? ColdFusion中有这种东西的最佳实践吗?

欢迎任何其他指示或建议。感谢

1 个答案:

答案 0 :(得分:3)

IMO你采取的方法没有错。任何CF开发人员都很熟悉。没有原生XML - &gt; CF中的对象映射技术(如Java中的JAXB或.NET中的XML序列化或数据绑定),因此无论您做什么,您最终都会在代码中的某处读取循环。 根据您希望国家/地区代码列表更改的频率,您可以在应用程序范围内缓存要返回的结构,这意味着您只需解析XML一次。

在回答结构/对象问题时,要么正常工作。从历史上看,对象实例化在CF中很昂贵,因此结构方法通常受到青睐。速度差现在不太明显,所以要么是有效的。

我选择对象/结构的个人标准是我是否需要在多个地方使用数据。如果它是我将在整个应用程序中使用并可能更新的东西,那么定义一个对象是值得的。如果我只是提供特定功能所特有的只读数据,那么定义对象就像开销一样。