現在、 Artsy パブリック APIに接続しようとしていますが、問題が発生しています。私は NodeJS と SailsJS を初めて使用します。私は api/services/Artsy.js というファイルを作成しましたが、私のアプローチ (以下を参照) が本当に Sails のやり方であるかどうかに悩んでいます。それが1つの質問です。そうでない場合、SailsJS で API への基本的な呼び出しを設定する適切な方法は何ですか? もっと具体的に言うと、Artsy API に対してですか?
頭に浮かぶ問題:
トークンを必要とする API メソッドを呼び出す前に、トークンが取得されるまで待つ必要があります。これは、pubsub またはその他の手法を介して行われますか。これが SailsJS でどのように機能するかを示す実用的な例はありますか?
ビュー内でサービス呼び出しを使用できますか? どのように?これは意味がありますか?API呼び出しに使えそうです。
注: 重要な変数を保持する config/artsy.js ファイルをセットアップしました。(これは以下を参照)
/api/services/Artsy.js
/**
*
* Artsy.js => in api/services
* @description A service that connects to the Artsy.net public API.
* @url https://developers.artsy.net/
**/
var request = require('superagent'),
traverson = require('traverson'),
xappToken;
module.exports = {
init: function(){
sails.log.info('----- Artsy API Initialized -----');
var clientID = sails.config.artsy.clientId,
clientSecret = sails.config.artsy.clientSecret,
apiTokenUrl = sails.config.artsy.apiTokenUrl;
try{
request
.post(apiTokenUrl)
.send({ client_id: clientID, client_secret: clientSecret })
.end(function(res) {
if (res) {
xappToken = res.body.token;
} else {
sails.log.error('api/services/Artsy.js:');
sails.log.error(res.text);
}
});
} catch(e) {
sails.log.error('api/services/Artsy.js:');
sails.log.error(e);
}
},
getArtistStatement: function(){
var api = traverson.jsonHal.from(sails.config.artsy.apiUrl);
var request = api.newRequest()
.follow('artist')
.withRequestOptions({
headers: {
'X-Xapp-Token': xappToken,
'Accept': 'application/vnd.artsy-v2+json'
}
})
.withTemplateParameters({ id: 'andy-warhol' })
.getResource(function(error, andyWarhol) {
console.log(andyWarhol.name + 'was born in ' + andyWarhol.birthday + ' in ' + andyWarhol.hometown);
});
}
};
/config/artsy.js
/**
* artsy.js
*
* @description :: This is the brains that allow the app to connect to artsy.
* @docs :: http://sailsjs.org/#!documentation/models
*/
module.exports.artsy = {
clientId: 'CLIENT_ID',
clientSecret: 'CLIENT_SECRET',
apiUrl: 'https://api.artsy.net/api',
apiTokenUrl: 'https://api.artsy.net/api/tokens/xapp_token'
};