APIとして実装しています。Lancers社のメインサービスはPHP×CakePHPで構築されているのですが、scikit-learnを使いたいので、別アプリケーションとして分離する必要があります。分離した以上は何かしらの方法で通信する必要があるので、直感的に理解しやすいRESTを採用しました。DELETEの4パターンで全ての操作を実現しようというものです。Parts」こちらの書籍がわかりやすいです。RESTでは、操作する対象データをリソースと呼びます。RESTでは、特定のリソースをURIで表現します。URIをどのように設計するかがエンドポイント設計です。Lancers社の仕事に関するレコメンドシステムのエンドポイントは次の通りです(内部ネットワークのみに解放しているエンドポイントです。外からは繋がりません)/v1/recommend/works/:work_id/バージョン/アプリケーション名/リソース名/リソースIDアプリケーション名をエンドポイントに含めることで、将来的にアプリケーションが増えた際に拡張するのが容易です。機械学習を用いて特定のworkがスパムかどうかを判定するアプリケーションを作成する場合は、次のようにアプリケーション名を変更するだけでエンドポイント設計が完了します。APIがわかりやすく、参考になります。gunicornLancers社で運用しているレコメンドサービスにはWebフレームワークとしてflaskを採用しています。APIを構築する程度であればflaskで十分です。アプリケーションサーバにはgunicornを採用し、起動停止管理ためにinitスクリプトを書いています。initスクリプトのサンプルです。https://gist.github.com/shigeomi-takada/bf5f8f12cf01cc2e9d1346ab6b5f6474アプリケーションのディレクトリ構成は下記のようにしています(一部省略)。learningの略です。testsエンドポイント設計に従ってルーティングを書きます。類似度計算で計算した類似度をRecommendクラスのgetメソッド内で返すようにすれば、Webアプリケーションとして成立します。©Lancers,inc.。