다음을 통해 공유


Data API 작성기에서 확장된 데이터베이스 개체

데이터 API 작성기에서는 데이터베이스 테이블 또는 컨테이너에 매핑하는 대신 뷰 및 저장 프로시저에 대한 지원을 포함합니다. 이러한 고유한 데이터베이스 개체를 사용하려면 REST 또는 GraphQL 엔드포인트에 원활하게 매핑하기 위한 사용자 지정 구성이 필요합니다. 뷰 및 저장 프로시저에서 데이터 API 작성기를 사용하려면 일부 사용자 지정 구성이 필요합니다.

이 문서에는 데이터 API 작성기에서 뷰와 저장 프로시저를 모두 사용하는 방법에 대한 분석이 포함되어 있습니다.

레이아웃

뷰는 데이터 API 작성기에서 테이블을 사용하는 방법과 유사하게 사용할 수 있습니다. 엔터티의 원본 형식을 view지정하여 뷰 사용량을 정의해야 합니다. 데이터 API 작성기에서 필요한 경우 단일 항목을 식별하고 반환하는 방법을 알 수 있도록 key-fields 속성을 제공해야 합니다.

보기가 있는 경우(예: dbo.vw_books_details 다음 dab 명령을 사용하여 노출될 수 있습니다.

dab add BookDetail --source dbo.vw_books_details --source.type View --source.key-fields "id" --permissions "anonymous:read"

참고

--source.key-fields CLI를 통해 구성을 생성할 때 뷰에 필수입니다.

dab-config.json 파일은 다음 예제와 같습니다.

"BookDetail": {
  "source": {
    "type": "view",
    "object": "dbo.vw_books_details",
    "key-fields": [ "id" ]
  },
  "permissions": [{
    "role": "anonymous",
    "actions": [ "read" ]
  }]
}

참고

뷰를 업데이트할 수 있거나않을 수 있도록 그에 따라 권한을 구성해야 합니다. 보기를 업데이트할 수 없는 경우 해당 보기를 기반으로 엔터티에 대한 읽기 액세스만 허용해야 합니다.

보기에 대한 REST 지원

REST 관점에서 보기는 테이블처럼 동작합니다. 모든 REST 작업이 지원됩니다.

보기에 대한 GraphQL 지원

GraphQL 관점에서 보기는 테이블처럼 동작합니다. 모든 GraphQL 작업이 지원됩니다.

저장 프로시저

저장 프로시저는 데이터 API 작성기에서 노출하는 엔터티와 관련된 개체로 사용할 수 있습니다. 엔터티의 원본 형식이 stored-procedure지정하여 저장 프로시저 사용을 정의해야 합니다.

참고

데이터 API 작성기에서는 관계형 데이터베이스(즉, MSSQL)에 대한 저장 프로시저를 지원하지만 비관계형 데이터베이스(예: NoSQL)는 지원하지 않습니다.

저장 프로시저가 있는 경우(예: dbo.stp_get_all_cowritten_books_by_author 다음 dab 명령을 사용하여 노출될 수 있습니다.

dab add GetCowrittenBooksByAuthor --source dbo.stp_get_all_cowritten_books_by_author --source.type "stored-procedure" --source.params "searchType:s" --permissions "anonymous:execute" --rest.methods "get" --graphql.operation "query"

dab-config.json 파일은 다음 예제와 같습니다.

"GetCowrittenBooksByAuthor": {
  "source": {
    "type": "stored-procedure",
    "object": "dbo.stp_get_all_cowritten_books_by_author",
    "parameters": {
      "searchType": "s"
    }
  },
  "rest": {
    "methods": [ "GET" ]
  },
  "graphql": {
    "operation": "query"
  },
  "permissions": [{
   "role": "anonymous",
    "actions": [ "execute" ]
  }]
}

parameters 노출해야 하는 매개 변수를 정의하고 HTTP 요청에 해당 매개 변수가 제공되지 않는 경우 저장 프로시저 매개 변수에 전달할 기본값도 제공합니다.

제한

  • 저장 프로시저에서 반환된 첫 번째 결과 집합만 Data API 작성기에서 사용됩니다.
  • sys.dm_exec_describe_first_result_set 설명한 첫 번째 결과 집합에 대한 메타데이터가 지원되는 저장 프로시저만 지원됩니다.
  • REST 및 GraphQL 엔드포인트의 경우: 저장 프로시저 매개 변수가 구성 파일과 URL 쿼리 문자열 모두에서 지정되면 URL 쿼리 문자열의 매개 변수가 우선합니다.
  • 저장 프로시저에서 지원하는 엔터티에는 테이블, 컬렉션 또는 뷰에서 지원하는 엔터티에 대해 자동으로 제공되는 모든 기능이 없습니다.
    • 저장 프로시저 지원 엔터티는 페이지 매김, 순서 지정 또는 필터링을 지원하지 않습니다. 또한 이러한 엔터티는 기본 키 값으로 지정된 항목 반환을 지원하지 않습니다.
    • 필드/매개 변수 수준 권한 부여 규칙은 지원되지 않습니다.

저장 프로시저에 대한 REST 지원

저장 프로시저 지원 엔터티의 REST 엔드포인트 동작은 하나 이상의 HTTP 동사(GET, POST, PUT, PATCH, DELETE)를 지원하도록 구성할 수 있습니다. 엔터티의 REST 섹션은 다음 예제와 같습니다.

"rest": {
  "methods": [ "GET", "POST" ]
}

구성에 나열되지 않은 HTTP 메서드를 사용하는 경우 HTTP 405 메서드 엔터티에 대한 REST 요청이 실패합니다. 예를 들어 PUT 요청 실행은 오류 코드 405와 함께 실패합니다. 섹션이 엔터티의 REST 구성에서 제외되면 POST 기본 메서드가 유추됩니다. 이 엔터티에 대한 REST 엔드포인트를 사용하지 않도록 설정하려면 "rest": false 구성하고 저장 프로시저 엔터티에 대한 REST 요청이 HTTP 404 찾을 수 없음실패합니다.

저장 프로시저에서 매개 변수를 허용하는 경우 GET HTTP 동사를 사용하여 REST 엔드포인트를 호출할 때 URL 쿼리 문자열에 매개 변수를 전달할 수 있습니다. 예를 들어:

GET http://<dab-server>/api/GetCowrittenBooksByAuthor?author=isaac%20asimov

POST, PUT, PATCH, DELETE와 같은 다른 HTTP 동사를 사용하여 실행되는 저장 프로시저는 요청 본문에서 매개 변수를 JSON으로 전달해야 합니다. 예를 들어:

POST http://<dab-server>/api/GetCowrittenBooksByAuthor
{
  "author": "isaac asimov"
}

저장 프로시저에 대한 GraphQL 지원

GraphQL의 저장 프로시저 실행은 저장 프로시저 지원 엔터티의 graphql 옵션을 사용하여 구성할 수 있습니다. 엔터티의 작업을 명시적으로 설정하면 저장 프로시저의 동작과 일치하는 방식으로 GraphQL 스키마의 저장 프로시저를 나타낼 수 있습니다.

참고

GraphQL 스키마에 쿼리 요소를 있어야 합니다. 저장 프로시저만 노출하는 경우 query 작업을 지원하는 프로시저 중 하나 이상이 있어야 합니다. 그렇지 않으면 The object type Query has to at least define one field in order to be valid. 같은 GraphQL 오류가 발생합니다.

작업에 대한 값을 설정하지 않으면 mutation 작업이 생성됩니다.

예를 들어 operation 옵션에 query 값을 사용하면 저장 프로시저가 GraphQL 스키마에서 쿼리 필드로 확인됩니다.

CLI 사용량:

dab add GetCowrittenBooksByAuthor --source dbo.stp_get_all_cowritten_books_by_author --source.type "stored-procedure" --source.params "searchType:s" --permissions "anonymous:execute" --rest.methods "GET" --graphql.operation "query"

런타임 구성:

"graphql": {
  "operation": "query"
}

GraphQL 스키마 구성 요소: 형식 및 쿼리 필드:

type GetCowrittenBooksByAuthor {
  id: Int!
  title: String
}

스키마에서 저장 프로시저에 대한 쿼리 및 변형 작업 모두 접두사로 execute. 이전 저장 프로시저의 경우 생성된 정확한 쿼리 이름 필드는 executeGetCowrittenBooksByAuthor. 생성된 GraphQL 형식은 다음과 같습니다.

type Query {
  executeGetCowrittenBooksByAuthor(
    searchType: String = "S"
  ): [GetCowrittenBooksByAuthor!]!
}

또는 변형 필드가 GraphQL 스키마의 저장 프로시저를 나타내도록 operationmutation 설정할 수 있습니다. dab update 명령을 사용하여 operation변경할 수 있습니다.

dab update GetCowrittenBooksByAuthor --graphql.operation "mutation"

런타임 구성:

"graphql": {
  "operation": "mutation"
}

생성된 GraphQL 스키마는 다음과 같습니다.

type Mutation {
  executeGetCowrittenBooksByAuthor(
    searchType: String = "S"
  ): [GetCowrittenBooksByAuthor!]!
}

저장 프로시저에서 매개 변수를 허용하는 경우 해당 매개 변수를 쿼리 또는 변형의 매개 변수로 전달할 수 있습니다. 예를 들어:

query {
  executeGetCowrittenBooksByAuthor(author:"asimov")
   {
    id
    title
    pages
    year
  }
}