2017-02-14 45 views
1

我想從我的環迴應用程序中的第三方REST服務中獲取數據。爲了從服務中獲取數據,我需要首先使用登錄名和密碼進行身份驗證。我可以使用curl測試服務:環回:使用REST連接器發送帶有json數據的請求

curl -b cookies -c cookies -X POST -d '{"auth": {"username":"MyUser","password":"Secret"}}' 'http://api.awesome.service.com/' 

這很好。 tcpdump的顯示要求這樣的:

Host: http://api.awesome.service.com/ 
User-Agent: curl/7.47.0 
Accept: */* 
Cookie: HBFAPI_SESSID=hbapi%3A197887%3A58a3028d12c36%3Anym2 
Content-Length: 58 
Content-Type: application/x-www-form-urlencoded 

{"auth":{"username":"MyUser","password":"Secret"}} 

所以,我創建數據源第一:

{ 
    "awesome_datasource": { 
    "name": "awesome_datasource", 
    "baseURL": "https://api.awesome.service.com/", 
    "crud": false, 
    "connector": "rest", 
    "operations": [{ 
     "template": { 
      "method": "POST", 
      "url": "http://api.awesome.service.com/auth", 
      "form":{ 
       "auth": { 
        "username": "{username:string}", 
        "password": "{password:string}" 
       } 
      }, 
      "json": true 
     }, 
     "functions":{ 
      "login": ["username", "password"] 
     } 
    }] 
    } 
} 

我測試了使用資源管理器。無論我做什麼,我都無法獲取格式爲json的請求主體中的數據。帶或不帶JSON的選擇結果是這個相同的,這在tcpdump的是:

host: api.awesome.service.com 
content-type: application/x-www-form-urlencoded 
accept: application/json 
content-length: 66 
Connection: close 

auth%5Busername%5D=MyUser&auth%5Bpassword%5D=Secret 

我試圖傳遞參數的「查詢」,「形式」或「數據」選項。還檢查了各種標題內容類型的選項,但目前還沒有運氣。

模型很簡單,沒有參數。基本模式是「模式」(無用戶,因爲我要保持它簡單越好)

我能找到這個線程,但它並沒有太大的幫助:

https://github.com/strongloop/loopback-connector-rest/pull/12 

任何意見會非常感謝。

回答

0

那麼所有你需要做的就是使用的json代替form有:

{ 
    "awesome_datasource": { 
    "name": "awesome_datasource", 
    "baseURL": "https://api.awesome.service.com/", 
    "crud": false, 
    "connector": "rest", 
    "operations": [{ 
     "template": { 
      "method": "POST", 
      "url": "http://api.awesome.service.com/auth", 
      "json": { 
       "auth": { 
        "username": "{username:string}", 
        "password": "{password:string}" 
       } 
      } 
     }, 
     "functions":{ 
      "login": ["username", "password"] 
     } 
    }] 
    } 
} 

REST連接器試圖模仿request module儘可能。基本上bodyjsonformqueryqs的要求)做同樣的事情請求選項,但他們也接受模板字符串。下面是從請求用少許修改的文檔:

  • queryqs在請求) - 含有查詢字符串的值對象被追加到uri
  • body - 實體主體爲PATCH,POST和PUT請求。必須是BufferStringReadStream。如果jsontrue,則body必須是JSON序列化對象。
  • form - 當傳遞一個對象或查詢字符串時,它將body設置爲值的查詢字符串表示形式,並添加Content-type: application/x-www-form-urlencoded標題。當沒有選項時,將返回一個FormData實例(並通過管道請求)。請參閱上面的「表單」部分。
  • json - 設置body到的值JSON表示,並增加了Content-type: application/json報頭。此外,將響應正文解析爲JSON。
+0

我知道關於body,query和form。我只是不知道json。謝謝。它幾乎工作,但用null替換佔位符: {「auth」:{「username」:null,「password」:null}} 我使用'body'解決了它的問題,但我必須將值傳遞爲: { 「用戶名」:..., 「密碼」:... } 這有點不舒服。 – user5926024

相關問題