フィルタリング|並べ替え|闊歩する
SieveFramework は、十分な抽象化レベルでフィルター、並べ替え、ページネーションをプロジェクトに簡単に統合できる高度なカスタマイズ可能なフレームワークです。内部的には、 System.Linq.Expressions
コレクションを使用した操作を実現し、クエリのネイティブ サポートを取得するのに役立ちます。
プロジェクト | 説明 |
---|---|
SieveFramework | 基本機能を備えたコアプロジェクト |
SieveFramework.AspNetCore | sieve を ASP.Net Core プロジェクトに統合するために必要な依存関係 |
SieveFramework.AspNetCore.Swashbuckle | sieve を Swagger フレームワークと統合するために必要な依存関係 |
主要なプロバイダはSieveProvider
です。これには、具体的なモデルに関する情報を保持するModelProvider
のコレクションが含まれているだけです。
メインプロバイダーは、クエリ可能なリソースの下にあるアクションのコレクションである述語を操作します。各述語は、リソースの下で 1 種類のクエリ アクションのみを実行できます。
この設計は、同じ種類の操作を 1 つのエグゼキューターに委任し、パイプライン内の操作の方向を制御するのに役立ちます。
パーサーによって提示され、カスタム モデル バインダーを使用してクエリ リクエストからバインドするために使用されるフィルターの形式。
[!] リクエスト本体のデータは、ネイティブ ASP.Net モデル バインダーにバインドされます。
デフォルトのネイティブ パーサーの構成:
エイリアス | 説明 |
---|---|
~ | NODE_DELIMITER - ノード内の値を分割するために使用されます |
& | OPERATION_DELIMITER - さまざまな操作を分割するために使用されます (デフォルトのクエリ スプリッター) |
filter= | FILTER - クエリパラメータにフィルタが含まれています |
sort= | SORT - クエリパラメータにソートが含まれています |
take= | TAKE - クエリパラメータには選択サイズが含まれます |
skip= | SKIP - クエリパラメータにはスキップサイズが含まれます |
計画されている機能は、モデルをデシリアライズしてクエリする DeepObject Swagger 形式です。
構造: Property
NODE_DELIMITER
Alias
NODE_DELIMITER
Value
エイリアス (ネイティブ) | エイリアス (ディープオブジェクト) | 説明 |
---|---|---|
eq | TODO | に等しい |
neq | TODO | 等しくありません |
gt | TODO | より大きい |
gte | TODO | 以上 |
lt | TODO | 未満 |
lte | TODO | 以下 |
構造: Filter
NODE_DELIMITER
Alias
NODE_DELIMITER
Filter
エイリアス (ネイティブ) | エイリアス (ディープオブジェクト) | 説明 |
---|---|---|
and | TODO | フィルタをとロジックで連結します |
or | TODO | orロジックによってフィルターを連結します |
or
条件によって最初に導出されるフィルター。つまり、node
~and
~node
~or
~node
(node
~and
~node
)~or
~node
になります。
構造: Property
NODE_DELIMITER
Alias
エイリアス (ネイティブ) | エイリアス (ディープオブジェクト) | 説明 |
---|---|---|
asc | TODO | 昇順で並べ替えます |
desc | TODO | 降順で並べ替えます |
ソート ノードは、
and
ロジックとのみ連結できます。
node
~and
~node
public void ConfigureServices ( IServiceCollection services )
{
services . AddSieveProvider ( config =>
{
// WithParser - Add custom Query parser. [NativeQueryParser] is default, no need to register them it's just an example
config . WithParser < NativeQueryParser > ( )
// ForAssemblies - Add assemblies to scan models by attributes [CanSort / CanFilter]
. ForAssemblies ( .. . )
// Fluent models registration
. ConfigureProvider ( provider =>
{
provider . AddModel < TestModel > ( builder =>
{
builder . CanSort ( p => p . TestProperty ) ;
builder . CanFilter ( p => p . TestProperty ) ;
} ) ;
} ) ;
} ) ;
services . AddControllers ( ) ;
}
public class WeatherForecastController : ControllerBase
{
// [1] Accept processor through DI
private readonly ISieveProvider _sieve ;
public WeatherForecastController ( ISieveProvider sieve )
{
_sieve = sieve ;
}
// [2] Wrap processed model's resource with [Sieve] - It will be maped automaticly
[ HttpGet ]
public ActionResult GetCustom ( Sieve < WeatherForecast > model )
{
var rng = new Random ( ) ;
var query = Enumerable . Range ( 1 , 5 ) . Select ( index => new WeatherForecast
{
Date = DateTime . Now . AddDays ( index ) ,
TemperatureC = rng . Next ( - 20 , 55 ) ,
Summary = "Summary" + index
} ) . AsQueryable ( ) ;
// [3] Apply filter to resource
var result = _sieve . Apply ( query , model ) . ToArray ( ) ;
return Ok ( new
{
origin = query . ToArray ( ) ,
result = result
} ) ;
}
}
public void ConfigureServices ( IServiceCollection services )
{
// [1] Must be registered before swagger
services . AddSieveProvider ( ) ;
services . AddControllers ( ) ;
services . AddSwaggerGen ( builder =>
{
// [2] Add configuration for swagger
services . AddSieveDescription ( builder ) ;
builder . SwaggerDoc ( "v1" , new OpenApiInfo
{
Title = "Test" ,
Version = "v1"
} ) ;
} ) ;
}
Sieve の説明は、強力に型指定された Sieve のモデルと、各 API アクションの並べ替えおよびフィルター処理が許可されているプロパティのリストを含む Swagger スキームを埋めます。