数日前に AngularJS を使い始めたとき、私は多くの便利なものを発見し、Web アプリケーションでそれを使用する方が、すべてをゼロから構築するよりも簡単であることに気付きました (必要な場合もありますが、ほとんどの場合ではありません)。アプリの読み込み時間を乱雑にする可能性のある多くのライブラリ。
そこで、多くのメソッドを備えたオンライン ショップ用の php API ラッパーがあり (REST を模倣しようとしましたが、API は POST と GET のみを提供します)、それを呼び出すために使用できる JS スクリプトの作成を開始しました。 PHP の知識がなくても、PHP コードに触れなくてもメソッドを作成できます。
AngularJS を使用して、私はこれを思いつきました:
var Application = Application || {};
;(function($, window, document, undefined) {
"use strict";
var Envato = {};
Application.Envato = angular.module("Envato", []);
Application.Envato.constant("API", {
Path : {
Private : "api/envato/private/",
Public : "api/envato/public/"
}
});
})(jQuery, window, document);
上記は私のモジュールで、modules
フォルダー内に配置されます。次は、モジュールの周りのファクトリビルドです(上記のモジュールと同じフォルダーに配置されます):
var Application = Application || {};
;(function($, window, document, undefined) {
"use strict";
Application.Envato.factory("APIXHRService", function($http, $timeout, $q) {
return function(method, url, data) {
var deferred = $q.defer(),
headers = {
"Content-Type" : "Application/JSON"
};
$http({ method : method, url : url, data : data, headers : headers }).success(function(_data) {
deferred.resolve(_data);
deferred = $q.defer();
}).error(function(_data) {
deferred.resolve(_data || "Request [ Failed ]");
deferred = $q.defer();
});
return deferred.promise;
};
});
Application.Envato.factory("Envato", function(APIXHRService, API) {
return {
API : {
Private : {
User : {
Account : function(user){
return APIXHRService("POST", API.Path.Private + "get-account-information.php", { user : user });
},
Statement : function(user) {
return APIXHRService("POST", API.Path.Private + "get-statement.php", { user : user });
},
Sales : function(user) {
return APIXHRService("POST", API.Path.Private + "get-recent-sales.php", { user : user });
},
Transactions : function(user) {
return APIXHRService("POST", API.Path.Private + "get-earnings-and-sales-by-month.php", { user : user });
},
Vitals : function(user) {
return APIXHRService("POST", API.Path.Private + "get-user-vitals.php", { user : user });
}
},
Purchases : {
Download : function(user, token) {
return APIXHRService("POST", API.Path.Private + "get-item-download-url.php", { user : user, token : token });
},
Information : function(user, token) {
return APIXHRService("POST", API.Path.Private + "get-purchase-information.php", { user : user, token : token });
}
}
},
Public : {
API : {
Releases : function() {
return APIXHRService("GET", API.Path.Public + "get-api-releases.php");
}
},
Blog : {
Posts : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-blog-posts.php", { marketplaces : marketplaces });
},
Threads : {
Active : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-active-threads.php", { marketplaces : marketplaces });
},
Status : function(threads) {
return APIXHRService("POST", API.Path.Public + "get-thread-status.php", { threads : threads });
}
}
},
Collections : function(collections) {
return APIXHRService("POST", API.Path.Public + "get-collections.php", { collections : collections });
},
Items : {
Count : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-items-count.php", { marketplaces : marketplaces });
},
Featured : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-featured-items.php", { marketplaces : marketplaces });
},
Information : function(items) {
return APIXHRService("POST", API.Path.Public + "get-item-information.php", { items : items });
},
Latest : {
Marketplace : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-new-items-from-market.php", { marketplaces : marketplaces });
},
Random : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-random-new-items.php", { marketplaces : marketplaces });
},
User : function(users) {
return APIXHRService("POST", API.Path.Public + "get-new-items-from-user.php", { users : users });
}
},
Popular : function(marketplaces) {
return APIXHRService("POST", API.Path.Public + "get-popular-items.php", { marketplaces : marketplaces });
},
Price : function(items) {
return APIXHRService("POST", API.Path.Public + "get-item-price.php", { items : items });
}
},
Users : {
Information : function(users) {
return APIXHRService("POST", API.Path.Public + "get-user-information.php", { users : users });
},
Items : {
Count : function(users) {
return APIXHRService("POST", API.Path.Public + "get-user-items-by-site.php", { users : users });
}
},
Total : function() {
return APIXHRService("GET", API.Path.Public + "get-total-users-count.php");
},
},
Search : function(expression, marketplace, categories) {
return APIXHRService("POST", API.Path.Public + "get-search-results.php", { expression : expression, marketplace : ( marketplace === undefined ? "" : marketplace ), categories : ( categories === undefined ? "" : categories ) });
}
}
}
};
});
})(jQuery, window, document);
最後に、必要に応じて、メソッドが適切に機能するかどうかを確認できるコントローラーを用意しました。
var Application = Application || {};
;(function($, window, document, undefined) {
"use strict";
Application.controller("EnvatoAPIController", ["$scope", "_debounce", "Envato", function($scope, _debounce, Envato) {
$scope.getData = _debounce(function($event) {
$event.preventDefault();
return Envato.API.Private.Purchases.Download("chaoscod3r", "52dfdscb1-dada-4ff8-bfcb-d3fdsbn55mda").then(function(data) {
$scope.data = JSON.stringify(data, undefined, 4);
});
}, 250, false);
}]);
})(jQuery, window, document);
これを投稿する理由は、コードを改善する方法についての洞察を探しているからです。多分 Angular でそれを行うより良い方法がありますか? 私は AngularJS API ドキュメントをすべて読む機会がなかったので、ここには Angular を使用している多くの開発者がいて、いくつかのヒントを教えてくれるはずです :)
EDIT:Envato
問題は、工場をどのように屈折させることができるかです。どの方法が最適でしょうか?