체틀틀필터링 | 정렬 | 멋진
SieveFramework는 충분한 추상화 수준으로 필터, 정렬 및 페이지 매김을 프로젝트에 쉽게 통합하는 데 도움이 되는 고도로 사용자 정의 가능한 프레임워크입니다. 내부적으로 System.Linq.Expressions 컬렉션을 사용하여 모든 작업을 수행하고 쿼리에 대한 기본 지원을 얻는 데 도움이 됩니다.
| 프로젝트 | 설명 |
|---|---|
SieveFramework | 기본 기능을 갖춘 핵심 프로젝트 |
SieveFramework.AspNetCore | ASP.Net Core 프로젝트에 시브를 통합하는 데 필요한 종속성 |
SieveFramework.AspNetCore.Swashbuckle | Swagger 프레임워크와 sieve를 통합하는 데 필요한 종속성 |
주요 공급자는 SieveProvider 입니다. 여기에는 구체적인 모델에 대한 정보를 유지하는 ModelProvider 컬렉션이 포함되어 있습니다.
기본 공급자는 쿼리 가능한 리소스 아래에 있는 작업 모음인 조건자와 함께 작동합니다. 각 조건자는 리소스 아래에서 한 가지 유형의 쿼리 작업만 수행할 수 있습니다.
이 설계는 동일한 유형의 작업을 하나의 실행자에게 위임하는 데 도움이 되며 파이프라인에서 작업 방향을 제어합니다.
파서에 의해 제공되고 사용자 정의 모델 바인더를 사용하여 쿼리 요청에서 바인딩하는 데 사용되는 필터 형식입니다.
[!] 요청 본문의 데이터는 기본 ASP.Net 모델 바인더와 바인딩됩니다.
기본 네이티브 파서 구성:
| 별명 | 설명 |
|---|---|
~ | NODE_DELIMITER - 노드 내부의 값을 분할하는 데 사용됩니다. |
& | OPERATION_DELIMITER - 다양한 작업을 분할하는 데 사용됩니다(기본 쿼리 분할기). |
filter= | FILTER - 쿼리 매개변수에 필터가 포함되어 있습니다. |
sort= | SORT - 쿼리 매개변수에 정렬이 포함되어 있습니다. |
take= | TAKE - 쿼리 매개변수에 선택 크기가 포함됩니다. |
skip= | SKIP - 쿼리 매개변수에 건너뛰기 크기가 포함되어 있습니다. |
계획된 기능은 쿼리할 모델을 역직렬화하는 DeepObject Swagger 형식입니다.
구조: Property NODE_DELIMITER Alias NODE_DELIMITER Value
| 별칭(네이티브) | 별칭(DeepObject) | 설명 |
|---|---|---|
eq | TODO | 같음 |
neq | TODO | 같지 않음 |
gt | TODO | 보다 큼 |
gte | TODO | 이상 |
lt | TODO | 미만 |
lte | TODO | 작거나 같음 |
구조: Filter NODE_DELIMITER Alias NODE_DELIMITER Filter
| 별칭(네이티브) | 별칭(DeepObject) | 설명 |
|---|---|---|
and | TODO | 필터 와 논리를 연결합니다. |
or | TODO | 필터를 또는 논리로 연결합니다. |
필터는 먼저
or조건에 의해 파생되므로node~and~node~or~node(node~and~node)~or~node가 됩니다.
구조: NODE_DELIMITER Property Alias
| 별칭(네이티브) | 별칭(DeepObject) | 설명 |
|---|---|---|
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 구성표를 채웁니다.