2014-05-06 19 views
0

是的,你之前已經聽說過,但我仍然發佈它..我是Groovy和Grails的新手。我正在嘗試使用最佳實踐來創建一個Grails Restful Client應用程序(最終是一個liferay portlet),它將能夠拉動JSON並將其呈現在漂亮的視圖中。Grails Restful Client應用程序,如何最好地構建OATH和視圖?

我發現這個偉大的腳本,其中一些修改至少將我們的第三方CRM供應商JSON中的對象拉出來,太棒了!所以它正在工作,但如果我沒有弄錯,最好不要將諸如OATH部件之類的東西模塊化爲Grails服務,因此它可用於多個控制器?我想將下面的(正在運行的)groovy腳本分解成Grails應用程序結構的正確部分,所以我有一個遵循最佳實踐的可擴展應用程序。由於portlet插件的版本要求,我必須留在Grails 2.2.5中。任何幫助將下面的代碼切碎,並進入正確的控制器,服務和意見將不勝感激,並幫助我(和其他人)瞭解這是如何工作的。

這是我認爲可能會在服務結束的東西

package school.infotech.edu 

import groovyx.net.http.HTTPBuilder 
import groovyx.net.http.HttpResponseException 
import static groovyx.net.http.ContentType.URLENC 
import static groovyx.net.http.Method.POST 
import static groovyx.net.http.Method.GET 
import static groovyx.net.http.ContentType.JSON 


@Grapes(
    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.6') 
) 

def sf_login_domain = 'https://crm.thirdpartyvendor.com/' 
def instance_domain 
def access_token = '' 
def consumer_key = 'BIGLONGKEYTHATWORKS' 
def consumer_secret = 'SOMENUMBERSTHATWORK' 
def auth_username = 'OURACCESSACCOUNTTHATWORKS' 
def auth_password = 'WORKINGPASSWORD' 
def auth_security_token = 'SECURITYTOKEN' 



//Request Access_token and instance domain for work 
def http = new HTTPBuilder(sf_login_domain) 
def postBody = [ 
     grant_type: 'password', 
     client_id: consumer_key, 
     client_secret: consumer_secret, 
     username: auth_username, 
     password: auth_password+auth_security_token 
     ] 
try{ 

    http.post(path : 'services/oauth2/token', 
      body : postBody, 
      requestContentType: URLENC) { resp, json -> 
       access_token = json.access_token 
       instance_domain = json.instance_url +"/" 
       } 

}catch(HttpResponseException e){ 
    println "Error code: ${e.statusCode}" 
    println "Post form: $postBody" 
} 


println "Access Token $access_token" 
println "Instance domain $instance_domain \n" 

所以我覺得這個東西可能是控制器或看法,但我如何調用該服務的東西?

println "List API Resources \n" 
http = new HTTPBuilder(instance_domain) 
http.request(GET,JSON) { req -> 
    uri.path = 'services/data/v28.0/' 
    headers['Authorization'] = "Bearer $access_token" 

    response.success = { resp, json -> 
    assert resp.status == 200 
    json.each{ key,value -> 
     println "$key : $value" 
    } 
    } 

    response.failure = { resp, json -> 
    println resp.status 
    println json.errorCode 
    println json.message 
    } 
} 

println "List sobject Resources \n" 
http.request(GET,JSON) { sobjectreq -> 
    uri.path = 'services/data/v28.0/sobjects/' 
    headers['Authorization'] = "Bearer $access_token" 

    response.success = { resp, json -> 
    assert resp.status == 200 


    json.each{ key,value -> 
     println "$key : $value \n" 
    } 
     json.objectDescribe.each{ key,value -> 
     println "$key : $value" 
    } 

    } 


} 

println "List chatter \n" 
http.request(GET,JSON) { req -> 
    uri.path = 'services/data/v28.0/chatter' 
    headers['Authorization'] = "Bearer $access_token" 

    response.success = { resp, json -> 
    assert resp.status == 200 
    json.each{ key,value -> 
     println "$key : $value" 
     } 
    } 

    response.failure = { resp, json -> 
    println resp.status 
    println json.errorCode 
    println json.message 
    } 
} 

懸而未決的問題是

  1. 這一塊應該去哪裏?
  2. 如何從服務中引用控制器/
  3. 如何在視圖中顯示結果JSON(如地圖?)?

在此先感謝您的幫助。

回答

相關問題