Aracılığıyla paylaş


Veri API'si oluşturucusunda genişletilmiş veritabanı nesneleri

Veri API oluşturucusu, veritabanı tablolarına veya kapsayıcılarına eşlemeye alternatif olarak görünümler ve saklı yordamlar için destek içerir. Bu ayrı veritabanı nesnelerinin REST veya GraphQL uç noktalarına sorunsuz bir şekilde eşlenmesi için özel yapılandırma gerekir. Veri API oluşturucusu'nu görünümler ve saklı yordamlarla kullanmak için bazı özel yapılandırmalar gereklidir.

Bu makale, Veri API'sini oluşturucusu ile hem görünümleri hem de saklı yordamları kullanma işleminin dökümünü içerir.

Görünümler

Görünümler, bir tablonun Veri API'sini oluşturucuda nasıl kullanabildiğine benzer şekilde kullanılabilir. Görünüm kullanımı, varlığın kaynak türü viewolarak belirtilerek tanımlanmalıdır. Veri API'sinin gerekirse tek bir öğeyi nasıl tanımlayıp döndürebileceğini bilmesi için key-fields özelliği de sağlanmalıdır.

Bir görünümünüz varsa, örneğin dbo.vw_books_details aşağıdaki dab komutu kullanılarak gösterilebilir:

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

Not

--source.key-fields, CLI aracılığıyla yapılandırma oluşturulurken görünümler için zorunludur.

dab-config.json dosyası aşağıdaki örnekteki gibi olacaktır:

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

Not

görünümün güncelleştirilebilir olması veyaolmaması için izni uygun şekilde yapılandırmanız gerektiğini unutmayın. Görünüm güncelleştirilebilir değilse, varlığa yalnızca bu görünümü temel alan okuma erişimine izin vermelisiniz.

Görünümler için REST desteği

REST perspektifinden bakıldığında görünüm, tablo gibi davranır. Tüm REST işlemleri desteklenir.

Görünümler için GraphQL desteği

GraphQL perspektifinden bir görünüm tablo gibi davranır. Tüm GraphQL işlemleri desteklenir.

Saklı yordamlar

Saklı yordamlar, Veri API'sini oluşturucusu tarafından kullanıma sunulan varlıklarla ilgili nesneler olarak kullanılabilir. Saklı Yordam kullanımı, varlığın kaynak türünün stored-procedurebelirterek tanımlanmalıdır.

Not

Veri API oluşturucusu ilişkisel veritabanları (MSSQL) için saklı yordamları destekler, ancak ilişkisel olmayan veritabanları için (örneğin NoSQL) desteklenmez.

Saklı yordamınız varsa, örneğin dbo.stp_get_all_cowritten_books_by_author aşağıdaki dab komutu kullanılarak gösterilebilir:

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 dosyası aşağıdaki örnekteki gibi olacaktır:

"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 hangi parametrelerin kullanıma sunulması gerektiğini tanımlar ve http isteğinde bu parametreler sağlanmazsa saklı yordam parametrelerine geçirilecek varsayılan değerleri de sağlar.

Sınırlama

  • Veri API oluşturucusu tarafından yalnızca saklı yordam tarafından döndürülen ilk sonuç kümesi kullanılır.
  • Yalnızca sys.dm_exec_describe_first_result_set tarafından açıklanan ilk sonuç kümesi için meta verileri desteklenen saklı yordamlar.
  • Hem REST hem de GraphQL uç noktaları için: Hem yapılandırma dosyasında hem de URL sorgu dizesinde saklı yordam parametresi belirtildiğinde, URL sorgu dizesindeki parametre öncelikli olur.
  • Saklı yordam tarafından desteklenen varlıklar, tablolar, koleksiyonlar veya görünümler tarafından desteklenen varlıklar için otomatik olarak sağlanan tüm özelliklere sahip değildir.
    • Saklı yordam destekli varlıklar sayfalandırmayı, sıralamayı veya filtrelemeyi desteklemez. Bu tür varlıklar, birincil anahtar değerleri tarafından belirtilen öğeleri döndürmeyi desteklemez.
    • Alan/parametre düzeyi yetkilendirme kuralları desteklenmez.

Saklı yordamlar için REST desteği

Saklı yordam destekli varlık için REST uç nokta davranışı, bir veya birden çok HTTP fiilini (GET, POST, PUT, PATCH, DELETE) destekleyecek şekilde yapılandırılabilir. Varlığın REST bölümü aşağıdaki örnekteki gibi olacaktır:

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

Yapılandırmada listelenmeyen bir HTTP yöntemi kullanıldığında varlık için rest istekleri HTTP 405 Yöntemine İzin Verilmeyen başarısız olur. Örneğin, PUT isteği yürütülürken hata kodu 405 ile başarısız olur. bölümü varlığın REST yapılandırmasının dışında tutulursa POST varsayılan yöntem çıkarılır. Bu varlığın REST uç noktasını devre dışı bırakmak için "rest": false yapılandırın ve saklı yordam varlığındaki REST istekleri HTTP 404 Bulunamadıile başarısız olur.

Saklı yordam parametreleri kabul ederse, GET HTTP fiiliyle REST uç noktası çağrılırken PARAMETRELER URL sorgu dizesinde geçirilebilir. Örneğin:

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

POST, PUT, PATCH, DELETE gibi diğer HTTP fiilleri kullanılarak yürütülen saklı yordamlar, parametrelerin istek gövdesinde JSON olarak geçirilmesini gerektirir. Örneğin:

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

Saklı yordamlar için GraphQL desteği

GraphQL'de saklı yordam yürütme, saklı yordam destekli varlığın graphql seçeneği kullanılarak yapılandırılabilir. Varlığın işlemini açıkça ayarlamak, GraphQL şemasında saklı yordamı saklı yordamın davranışıyla uyumlu bir şekilde temsil etmenizi sağlar.

Not

GraphQL şemada bir Sorgu öğesinin olmasını gerektirir. Yalnızca saklı yordamları ortaya çıkarıyorsanız, en az birinin query işlemini desteklediğinden emin olun, aksi takdirde The object type Query has to at least define one field in order to be valid. gibi bir GraphQL hatası alırsınız

İşlem için herhangi bir değer ayarlanmaması, bir mutation işleminin oluşturulmasına neden olur.

Örneğin, operation seçeneği için query değerinin kullanılması, saklı yordamın GraphQL şemasında sorgu alanı olarak çözümlenmesine neden olur.

CLI Kullanımı:

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"

Çalışma Zamanı Yapılandırması:

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

GraphQL Şema Bileşenleri: tür ve sorgu alanı:

type GetCowrittenBooksByAuthor {
  id: Int!
  title: String
}

Şemada, saklı yordamlar için hem sorgu hem de mutasyon işlemleri ön ek olarak execute. Önceki saklı yordam için, oluşturulan tam sorgu adı alanı executeGetCowrittenBooksByAuthorolacaktır. Oluşturulan GraphQL türü:

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

Alternatif olarak, bir mutasyon alanının GraphQL şemasındaki saklı yordamı temsil edebilmesi için operationmutation olarak ayarlanabilir. dab update komutu, operationdeğiştirmek için kullanılabilir:

dab update GetCowrittenBooksByAuthor --graphql.operation "mutation"

Çalışma zamanı yapılandırması:

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

Oluşturulan GraphQL şeması:

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

Saklı yordam parametreleri kabul ederse, bu parametreler sorgunun veya mutasyonun parametresi olarak geçirilebilir. Örneğin:

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