0

現在、 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'
};

4

1 に答える 1