프로젝션은 클라이언트가 실제로 필요로 하는 것만 반환하는 데 도움이 됩니다. 페이로드가 작을수록 성능이 향상되고 네트워크 비용이 절감되며 클라이언트 쪽 구문 분석 오버헤드가 줄어듭니다. 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 규칙에 따라 시작 $합니다.