Dotnet Web Api 인터뷰 노트의 OData

5559 단어
  • OData(Open Data Protocol)는 웹용 데이터 액세스 프로토콜입니다. OData는 CRUD 작업(생성, 읽기, 업데이트 및 삭제)을 통해 데이터 세트를 쿼리하고 조작하는 일관된 방법을 제공합니다.
  • OData는 OData 쿼리를 수정하는 데 사용할 수 있는 매개 변수를 정의합니다. 클라이언트는 요청 URI의 쿼리 문자열에서 이러한 매개 변수를 보냅니다. 예를 들어 결과를 정렬하기 위해 클라이언트는 $orderby 매개 변수를 사용합니다.
  • http://localhost/Products?$orderby=Name
  • OData 사양은 이러한 매개 변수 쿼리 옵션을 호출합니다. 컨트롤러가 OData 엔드포인트일 필요가 없는 프로젝트의 모든 Web API 컨트롤러에 대해 OData 쿼리 옵션을 활성화할 수 있습니다. 이렇게 하면 웹 API 애플리케이션에 필터링 및 정렬과 같은 기능을 추가할 수 있는 편리한 방법이 제공됩니다.

  • 웹 API 5.2

    OData v4

    Visual Studio 2017(Visual Studio 2017 다운로드here )

    엔티티 프레임워크 6

    .NET 4.7.2

    ㅏ. OData 끝점 구성



    App_Start/WebApiConfig.cs 파일을 엽니다. 다음 using 문을 추가합니다.

    using ProductService.Models;
    
    using Microsoft.AspNet.OData.Builder;
    
    using Microsoft.AspNet.OData.Extensions;
    
    


    그런 다음 Register 메서드에 다음 코드를 추가합니다.

    public static class WebApiConfig
    
    {
    
    public static void Register(HttpConfiguration config)
    
    {
    
    // New code:
    
    ODataModelBuilder builder = new ODataConventionModelBuilder();
    
    builder.EntitySet<Product>("Products");
    
    config.MapODataServiceRoute(
    
    routeName: "ODataRoute",
    
    routePrefix: null,
    
    model: builder.GetEdmModel());
    
    }
    
    }
    
    Inherits odatacontroller:
    
    public class ProductsController : ODataController
    
    


    public async Task Patch([FromODataUri] int key, Delta 제품)

    OData는 PATCH 및 PUT이라는 엔터티 업데이트를 위한 두 가지 의미 체계를 지원합니다.

    PATCH는 부분 업데이트를 수행합니다. 클라이언트는 업데이트할 속성만 지정합니다.

    PUT은 전체 엔터티를 대체합니다.

    비. 쿼리 옵션

    다음은 ASP.NET WebAPI가 지원하는 OData 쿼리 옵션입니다.

    $orderby: 가져온 레코드를 오름차순 또는 내림차순과 같은 특정 순서로 정렬합니다.

    *?$orderby=ProductName desc *

    $orderby=제품명 asc

    $select: 결과 집합에서 열 또는 속성을 선택합니다. 가져온 결과에 포함할 모든 특성 또는 속성을 지정합니다.

    $skip: 레코드 또는 결과의 수를 건너뛸 때 사용합니다. 예를 들어 전체 테이블 데이터를 가져오는 동안 데이터베이스에서 처음 100개의 레코드를 건너뛰고 싶다면 $skip을 사용할 수 있습니다.

    *$top=5&$skip=3 *

    *$orderby=ProductName asc &$skip=6 *

    $top: 상위 n개의 레코드만 가져옵니다. 예를 들어 데이터베이스에서 상위 10개 레코드를 가져오려면 내 특정 서비스가 $top 쿼리 옵션을 지원하도록 OData를 활성화해야 합니다. ? $탑=2

    $orderby=제품 ID asc&$top=5

    $expand: 가져온 엔터티의 관련 도메인 엔터티를 확장합니다.

    $filter: 특정 조건에 따라 결과 집합을 필터링합니다. LINQ의 where 절과 같습니다. 예를 들어 90% 이상의 점수를 받은 학생 50명의 기록을 가져와서 이 쿼리 옵션을 사용할 수 있습니다.

    $filter=제품 이름 eq 컴퓨터

    *$filter=ProductId lt 3 *

    *$filter=ProductId ge 3 and ProductId le 5 *

    *$filter=substringof(IPhone,ProductName) *

    $inlinecount: 이 쿼리 옵션은 주로 클라이언트 측에서 페이지 매김에 사용됩니다. 서버에서 클라이언트로 가져온 총 엔티티 수를 알려줍니다.

    [Queryable] [GET(allproducts)] [GET(all)] public HttpResponseMessage Get() { var products = _productServices.GetAllProducts().AsQueryable(); var productEntities = products as List ?? products.ToList(); if (productEntities.Any()) return Request.CreateResponse(HttpStatusCode.OK, productEntities.AsQueryable()); throw new ApiDataException(1000, Products not found, HttpStatusCode.NotFound); }



    씨. 표준 필터 연산자

    Web API는 다음 표에 나열된 표준 OData 필터 연산자를 지원합니다.

    운영자

    설명

    예시

    비교 연산자

    등가

    동일한

    $filter=수익 eq 100000



    같지 않음

    $filter=수익 네 100000

    GT

    보다 큰

    $filter=수익 100000



    크거나 같음

    $filter=수익 ge 100000

    중위

    미만

    $filter=수익 lt 100000



    보다 작거나 같음

    $filter=수익 르 100000

    논리 연산자

    그리고

    논리적이고

    $filter=수익 lt 100000 및 수익 gt 2000

    또는

    논리적 또는

    $filter=contains(name,(sample)) 또는 contains(name,test)

    아니다

    논리적 부정

    $filter=포함하지 않음(이름, 샘플)

    그룹화 연산자

    ( )

    우선 순위 그룹화

    (contains(name,sample) 또는 contains(name,test)) 및 수익 gt 5000

    디. 표준 쿼리 함수

    웹 API는 이러한 표준 OData 문자열 쿼리 함수를 지원합니다.

    기능

    예시

    포함

    $filter=contains(이름,(샘플))

    로 끝나다

    $filter=endswith(name,Inc.)

    시작하다

    $filter=startswith(이름,a)

    Paging:
    
    [Queryable(PageSize = 10)]
    
    


    이자형. 쿼리 제약:

    [Queryable(AllowedQueryOptions =AllowedQueryOptions.Filter | AllowedQueryOptions.OrderBy)]

    [GET(전상품)]

    [모든 것을 가져라)]

    공개 HttpResponseMessage Get()

    좋은 웹페이지 즐겨찾기