다음을 통해 공유


REST의 필드 선택(프로젝션)

프로젝션은 클라이언트가 실제로 필요로 하는 것만 반환하는 데 도움이 됩니다. 페이로드가 작을수록 성능이 향상되고 네트워크 비용이 절감되며 클라이언트 쪽 구문 분석 오버헤드가 줄어듭니다. DAB(데이터 API 작성기)는 쿼리 매개 변수를 통해 REST에 대한 프로젝션을 $select 구현합니다.

비고

REST 쿼리 매개 변수 이름(포함 $select)은 대/소문자를 구분합니다. 또한 필드 이름은 구성하거나 노출한 항목에 따라 대/소문자를 구분합니다.

이 문서의 GraphQL 버전으로 이동합니다.

기본 선택

패턴

GET /api/{entity}?$select=FieldA,FieldB,FieldC

생략하면 $select DAB는 호출자의 역할이 읽을 수 있는 권한이 있는 모든 필드를 반환합니다(구성 및 exclude 필드 수준 사용 권한에 따라include). 와일드카드 *토큰은 없습니다. 허용되는 전체 셰이프를 요청하는 방법은 생략 $select 합니다.

예시

# Return all accessible fields
GET /api/author

# Return only first_name
GET /api/author?$select=first_name

# Return only first_name and last_name
GET /api/author?$select=first_name,last_name

내부 및 응답 열

기본 키 또는 순서 지정 필드를 프로젝션할 필요가 없습니다. 생략하면 JSON 응답에 표시되지 않습니다. 그러나 DAB는 내부적으로 보안 정책(행 수준 필터, 필드 마스크)을 적용하고 페이지 매김 커서($after / nextLink)를 처리하는 데 필요한 추가 열을 가져올 수 있습니다.

비고

이러한 내부적으로 페치된 열은 명시적으로 요청하지 않는 한 응답 전에 제거됩니다.

Example

GET /api/book?$select=id,title&$orderby=publisher_id desc&$first=5

개념적 SQL

SELECT TOP (6) -- first (5) + 1 probe row for paging
  [b].[id],
  [b].[sku_title] AS title
FROM dbo.books AS [b]
ORDER BY [b].[publisher_id] DESC, [b].[id] ASC;

응답

{
  "value": [
    { "id": 101, "title": "Example 1" },
    { "id": 77,  "title": "Example 2" },
    { "id": 42,  "title": "Example 3" },
    { "id": 33,  "title": "Example 4" },
    { "id": 5,   "title": "Example 5" }
  ],
  "nextLink": "..."
}

페이지 매김 및 after 키워드에 대해 자세히 알아봅니다.

추가 내부 열과 여섯 번째 프로브 행은 페이로드에 표시되지 않습니다.

저장된 프로시저

저장 프로시저 지원 엔터티 $select 의 경우 프로젝션 절로 해석되지 않습니다. 대신 쿼리 문자열 키/값 쌍(예: $filter$orderby인식된 시스템 매개 변수 제외) 저장 프로시저 매개 변수로 처리됩니다. $select 에는 아무런 영향이 없습니다. 프로시저의 결과 집합은 셰이프를 정의합니다.

구성 예

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

참고하십시오

개념 REST GraphQL 목적
Projection $select 항목 반환할 필드 선택
Filtering $filter 필터 조건별로 행 제한
정렬 $orderby orderBy 정렬 순서 정의
페이지 크기 $first 첫 번째 페이지당 항목 수 제한
연속 $after 커서를 사용하여 마지막 페이지에서 계속

비고

REST 키워드는 OData 규칙에 따라 시작 $합니다.