2017-02-14 16 views
1

私のループバックアプリケーションでサードパーティのRESTサービスからデータを取得したいと思います。サービスからデータを取得するには、まずログインとパスワードで認証する必要があります。私はカールを使ってサービスをテストできます:ループバック: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を模倣しようとします。基本的にbodyjsonformquery(要望に応じてqs)は、リクエストオプションと同じことを行いますが、テンプレート文字列も受け入れます。 PATCH、POSTとPUT要求のためのエンティティボディ - - uri

  • bodyに追加するクエリ文字列値を含むオブジェクト

    • query(リクエストでqs):ここで少し修正して、要求からのドキュメントがあります。 Buffer,StringまたはReadStreamである必要があります。 jsontrueの場合、bodyはJSON直列化可能オブジェクトでなければなりません。
    • form - オブジェクトまたはクエリ文字列が渡されると、bodyは値のクエリー文字列に設定され、Content-type: application/x-www-form-urlencodedヘッダーが追加されます。オプションを渡さないと、FormDataインスタンスが返されます(要求に応じてパイプされます)。上記の「フォーム」を参照してください。
    • json - 値のJSON表現にbodyを設定し、Content-type: application/jsonヘッダーを追加します。さらに、応答本体をJSONとして解析します。
  • +0

    私は身体、質問、およびフォームについて知っていました。私はちょうどjsonについて知らなかった。ありがとう。それはほとんど動作しますが、ヌルのでプレースホルダを置き換えます。 {「AUTH」:{「ユーザ名」:ヌル、「パスワード」:ヌル}} 私は「身体」を使用してealierそれを解決したが、私のように値を渡す必要があります。 { "username":...、 "password":... } これは少し不快です。 – user5926024

    関連する問題