2016-05-19 8 views
0

私は、既存のCRUDエンドポイントの上にカスタムAPIエンドポイント(loopback.ioを使用)を開発中です。RESTful APIエンドポイントフィルタと検索の設計

これまでは、プロトタイプ用にいくつかのNode RESTful APIフレームワークを使用していましたが、実際に提供する強力なフィルタリング機能を本当に楽しんでいました。

私がしたいのは、カスタムエンドポイントのフィルタリングと同様のセット(またはサブセット)を提供することです。エンドポイントは(いくつかのJOINを使って)SQLクエリを実行し、オブジェクトの配列を返します。

いくつかのフィルタリングを設計するために使用すべき標準化されたアプローチはありますか?たとえば、ベーステーブルのフィールドをフィルタリングしたり、リレーションをフィルタリングしたりすることができます。 loopback.ioとsequelizeの方法が好きなのは、比較的簡単にincludesを指定して、関連するオブジェクトとそのフィルタリング構文をリンクできるようにすることです。

通常、このような問題はカスタム実装が完了したときにどのように近づいていますか?

答えて

0

CRUDエンドポイントで気づいたように、LoopBackはfilterパラメータを使ってすぐにqueryingを提供します。​​でそれをうまく試すことができます。カスタムremote methodのクエリを公開する場合は、パラメータとしてもフィルタを追加するだけです。

例-model.js

module.exports = ExampleModel => { 
    const search = async (filter = {}) => { 
    return await ExampleModel.find(filter) 
    } 

    ExampleModel.remoteMethod('search', { 
    description: 'Returns a set of ExampleModel based on provided query.', 
    accepts: [ 
     {arg: 'filter', type: 'object', required: false} 
    ], 
    http: {path: '/search', verb: 'get'}, 
    returns: {root: true} 
    }) 

    ExampleModel.search = search 
} 
+0

事があるが、フィルタは、ループバックモデル上で動作します。いくつかの高度なクエリでは、これらを実行する唯一の方法はカスタムSQLを書くことであることがわかりました。しかし、エンドポイントがCRUDエンドポイントに似ているように、何らかの形式のフィルタリング(基本的な場所、順序、制限、オフセット)を持つことは素晴らしいことです。 – J3Y

関連する問題