Justin
Justin

Reputation: 398

Best way for implementing webservice in CF

I have to create a web service in ColdFusion. I have tried the below 2 ways. Can anyone help me to find which one is the best way (Both Performance and security enhancement basis)

First Way

Created a cfm page like below;

    <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>

And Created a cfc named 'Sample' under webservice folder and called like above.

WebService URL

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

Second Way

Called directly from the CFC Sample

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 URL

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

Upvotes: 0

Views: 77

Answers (2)

CFMLBread
CFMLBread

Reputation: 754

I would suggest setting up RESTful web services in ColdFusion. Here is an excellent article to get you started.

There's also Taffy which claims to make it simpler, although I have not used it.

Upvotes: 0

Njna Grimsdottir
Njna Grimsdottir

Reputation: 71

The second method is the standard way to do WebServices in CFML. Along with the functionality, you are seeking you get standards based WSDL returns and definitions. It's a case of rebuilding the wheel. I'm sure the underlying CF code for ws could be optimized, but it's pretty good as is and has been field-tested by millions.

Upvotes: 2

Related Questions