在CF中实现Web服务的最佳方式

时间:2017-05-11 07:17:05

标签: web-services coldfusion cfml cfc

我必须在ColdFusion中创建一个Web服务。我尝试了以下两种方式。任何人都可以帮我找到哪一个是最佳方式(性能和安全性增强基础)

第一种方式

创建如下所示的cfm页面;

    <cfset result               = StructNew() />
    <cfset resultStruct         = StructNew() />
    <cfset validStruct          = StructNew() />
    <cfset VARIABLES.Sample     = CreateObject("component","main.webservice.Sample")>

    <cfif NOT isDefined("URL.method")>
      <cfset result['status'] = false >
      <cfset result['message'] = 'method is missing' />
      <cfoutput>#SerializeJSON(result)#</cfoutput>
      <cfabort>
    </cfif>

    <cfswitch expression="#URL.method#">
      <cfcase value="get">
        <cfset fieldList = "name">
        <cfset validStruct = validate(fieldList) />
        <cfif validStruct['status']>
           <cfset resultStruct = VARIABLES.Sample.get(argumentCollection=URL) />
        </cfif>
        <cfoutput>#SerializeJSON(resultStruct)#</cfoutput>
        <cfbreak>
      </cfcase>

      <cfcase value="put">
        <cfset fieldList = "name,value">
        <cfset validStruct = validate(fieldList) />
        <cfif validStruct['status']>
          <cfset resultStruct = VARIABLES.Sample.put(argumentCollection=URL) />
        </cfif>
        <cfoutput>#SerializeJSON(resultStruct)#</cfoutput>
        <cfbreak>
     </cfcase>

     <cfdefaultcase>
        <cfset result['status'] = false >
        <cfset result['message'] = 'Not a valid method' />
        <cfoutput>#SerializeJSON(result)#</cfoutput>
        <cfbreak> 
     </cfdefaultcase>
   </cfswitch>

并在webservice文件夹下创建一个名为'Sample'的cfc,并在上面调用。

WebService网址

http://test.com/webservice/Sample.cfm?method=get&name=test

第二种方式

直接从CFC样本

调用

Sample.CFC

<cfcomponent displayname="Sample" hint="Sample WebService" output="false">

  <cffunction name="get" access="remote" returntype="struct" returnformat="json">
     <cfargument name="name" required="true" type="string" >

     <cfreturn StructNew() />        
  </cffunction>

  <cffunction name="put" access="remote" returntype="struct" returnformat="json">
     <cfargument name="name" required="true" type="string" >
     <cfargument name="value" required="true" type="string" >

     <cfreturn StructNew() />        
  </cffunction>

</cfcomponent>

WebService网址

http://test.com/webservice/Sample.CFC?method=get&name=test

1 个答案:

答案 0 :(得分:2)

第二种方法是在CFML中执行WebServices的标准方法。除了功能之外,您还在寻求获得基于标准的WSDL返回和定义。这是重建车轮的一个案例。我确信ws的底层CF代码可以进行优化,但它确实很好,并且经过数百万的现场测试。