Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
  
    Lihat dokumentasi 
    Apigee Edge.
  
  
       
 
  
Apa
Kebijakan GraphQL dapat mengurai payload GraphQL menjadi variabel alur pesan, memverifikasi permintaan GraphQL terhadap skema, atau keduanya.
Anda dapat menggunakan kebijakan GraphQL untuk:
- Pastikan API Anda hanya memproses permintaan yang sesuai dengan skema yang Anda berikan.
- Terapkan batasan pada payload dengan menetapkan jumlah maksimum fragmen yang diizinkan.
- Mengaitkan GraphQL dengan produk API.
- Manfaatkan fitur kebijakan Oauth2, VerifyAPIKey, dan Quota, seperti halnya di REST.
GraphQL mendukung jenis payload berikut:
- POST payload graphQL dengan Content-Type : application/graphql
- POST payload graphQL dengan Content-Type: applcation/json
- GET payload graphQL dengan payload adalah parameter kueri
Untuk informasi selengkapnya, lihat referensi berikut:
Kebijakan ini adalah kebijakan Standar dan dapat di-deploy ke jenis lingkungan apa pun. Untuk mengetahui informasi tentang jenis dan ketersediaan kebijakan dengan setiap jenis lingkungan, lihat Jenis kebijakan.
Lihat Menggunakan GraphQL untuk contoh yang menggunakan kebijakan ini.
Elemen <GraphQL>
  Menentukan kebijakan <GraphQL>.
| Nilai default | Lihat tab Kebijakan Default di bawah | 
| Wajib? | Wajib | 
| Jenis | JENIS | 
| Elemen Induk | t/a | 
| Elemen Turunan | <Action><MaxDepth><MaxCount><MaxPayloadSizeInBytes><OperationType><Source><ResourceURL> | 
Sintaks
Elemen <GraphQL> menggunakan sintaksis berikut:
<GraphQL continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Source>request</Source> <OperationType>[query|mutuation|all]</OperationType> <MaxDepth>MAX_DEPTH</MaxDepth> <MaxCount>MAX_NUMBER_OF_QUERIES</MaxCount> // [Start maxpayloadsize] <MaxPayloadSizeInBytes>MAX_PAYLOAD_SIZE_IN_BYTES</MaxPayloadSizeInBytes> <Action>parse</Action> <ResourceURL>PATH/TO/SCHEMA.xsd</ResourceURL> </GraphQL>
Kebijakan Default
Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan <GraphQL>
      ke alur di UI Apigee:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GraphQL name="GraphQLParser"> <Source>request</Source> <OperationType>query</OperationType> <MaxDepth>10</MaxDepth> <MaxCount>10</MaxCount> <MaxPayloadSizeInBytes></MaxPayloadSizeInBytes> <Action>parse</Action> <ResourceURL></ResourceURL> </GraphQL>
Elemen ini memiliki atribut berikut yang umum untuk semua kebijakan:
| Atribut | Default | Wajib? | Deskripsi | 
|---|---|---|---|
| name | T/A | Wajib | Nama internal kebijakan. Nilai atribut  Secara opsional, gunakan elemen  | 
| continueOnError | false | Opsional | Tetapkan ke falseuntuk menampilkan error saat kebijakan gagal. Perilaku ini wajar terjadi untuk
          sebagian besar kebijakan. Tetapkan ketrueagar eksekusi alur berlanjut meskipun setelah kebijakan gagal. Lihat juga: | 
| enabled | benar | Opsional | Tetapkan ke trueuntuk menerapkan kebijakan. Tetapkan kefalseuntuk menonaktifkan
          kebijakan. Kebijakan tidak akan diterapkan meskipun tetap terlampir ke alur. | 
| async | false | Tidak digunakan lagi | Atribut ini tidak digunakan lagi. | 
Tabel berikut memberikan deskripsi umum tentang elemen turunan
  <GraphQL>:
| Elemen Turunan | Wajib? | Deskripsi | 
|---|---|---|
| Operasi umum | ||
| <Action> | Opsional | Menentukan tindakan yang harus dilakukan untuk permintaan: parse,verify, atauparse_verify(keduanya). | 
| <MaxCount> | Opsional | Jumlah maksimum kueri atau fragmen yang dapat dihasilkan oleh permintaan GraphQL. Nilai defaultnya adalah 10. | 
| <MaxDepth> | Opsional | Kedalaman maksimum pohon untuk kueri. Nilai defaultnya adalah 4. | 
| <MaxPayloadSizeInBytes> | Opsional | Ukuran maksimum payload dalam kilobyte. | 
| <OperationType> | Wajib | Menentukan jenis permintaan yang dapat diuraikan: query,mutation, atauquery_mutation(salah satunya). | 
| <ResourceURL> | Opsional | DESKRIPSI. Lokasi file skema GraphQL. | 
| <Source> | Wajib | request | 
Setiap elemen turunan ini dijelaskan di bagian selanjutnya.
Referensi elemen turunan
Bagian ini menjelaskan elemen turunan <GraphQL>.
<Action>
  
  Tindakan mewakili salah satu tindakan GraphQL berikut:
- parse: Apigee mengurai payload GraphQL menjadi variabel alur pesan. Lihat Contoh representasi variabel alur pesan untuk penjelasan variabel yang ditetapkan saat- Actionditetapkan ke- parse. Hal ini dapat menghemat waktu CPU yang berharga di backend. Perhatikan bahwa- verifyjuga mengurai payload.
- verify: Apigee memverifikasi bahwa payload GraphQL sesuai dengan skema yang diupload ke proxy.
- parse_verify: Apigee mengurai dan memverifikasi permintaan GraphQL.
| Nilai default | parse | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <Action> menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Action>parse</Action>
</GraphQL><MaxCount>
  
  Jumlah maksimum fragmen yang dapat ada dalam payload. Anda dapat menggunakan ini untuk mencegah server backend GraphQL pelanggan menjalankan kueri yang sangat kompleks, sehingga memaksa klien memecah logika mereka menjadi payload yang lebih kecil.
| Nilai default | 10 | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <MaxCount> menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <MaxCount>MAX_NUMBER_OF_QUERIES</MaxCount>
</GraphQL><MaxDepth>
  
  Kedalaman maksimum kueri, saat ditampilkan sebagai pohon.
  MaxDepth memungkinkan Anda memblokir kueri mendalam dalam payload,
  sehingga Apigee tidak perlu membuat variabel alur yang sangat besar untuk menyimpan nilai.
   Namun, payload dikirim apa adanya, terlepas dari nilai MaxDepth.
   Nilai defaultnya adalah 10.
| Nilai default | 10 | 
| Wajib? | Opsional | 
| Jenis | Bilangan bulat | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <MaxDepth> menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <MaxDepth>MAX_DEPTH</MaxDepth>
</GraphQL><MaxPayloadSizeInBytes>
  
  Ukuran maksimum payload dalam kilobyte. Anda dapat menggunakan ini untuk membatasi ukuran payload guna menghindari masalah performa.
Catatan:  Jika MaxPayloadSizeInByte tidak diberikan dalam kebijakan,
      tidak ada batasan ukuran yang diberlakukan.
| Nilai default | request | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <MaxPayloadSizeInBytes> menggunakan sintaksis berikut:
Sintaks
<GraphQL continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <MaxPayloadSizeInBytes>MAX_PAYLOAD_SIZE_IN_BYTES</MaxPayloadSizeInBytes> </GraphQL>
<OperationType>
  
  Menunjukkan jenis permintaan yang dapat diuraikan:
- query: Kueri GraphQL.
- mutation: Mutasi GraphQL
- query_mutation: Kueri atau mutasi GraphQL.
Jika cakupannya adalah query, dan permintaan mutasi diteruskan, permintaan akan gagal
  dan menampilkan error 4xx.
| Nilai default | query | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <OperationType> menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <OperationType>[query|mutation|query_mutation]</OperationType>
</GraphQL><ResourceURL>
  Jalur ke file skema GraphQL yang digunakan kebijakan GraphQL untuk memverifikasi permintaan. Lihat Contoh untuk contoh mengupload skema GraphQL ke Apigee.
Jika nama file skema yang Anda upload adalah my-schema.graphql, maka elemen
  <ResourceURL> adalah
  
<ResourceURL>graphql://my-schema.graphql</ResourceURL>
| Nilai default | t/a | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen ResourceURL menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <ResourceURL>PATH/TO/SCHEMA.graphql</ResourceURL>
</GraphQL><Source>
  
  Sumber tempat kebijakan ini dijalankan.
| Nilai default | request | 
| Wajib? | Opsional | 
| Jenis | String | 
| Elemen Induk | <GraphQL> | 
| Elemen Turunan | tidak ada | 
Elemen <Source> menggunakan sintaksis berikut:
Sintaks
<GraphQL
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Source>request</Source>
</GraphQL>GraphQL Parser
Parser graphQL mendukung semua fitur kueri graphQL dan menampilkannya sebagai grafik dalam notasi putus-putus alur pesan. Kueri dapat terdiri dari definisi operasi dan secara opsional fragmen yang diidentifikasi sebagai definisi fragmen. Lihat spesifikasi GraphQL.
Anatomi permintaan GraphQL
Diagram di bawah menunjukkan anatomi permintaan GraphQL.
 
  Representasi dalam alur pesan definisi operasi
Implementasi parser mencakup semua aspek sintaksis GraphQL, termasuk dukungan untuk kueri dan mutasi. Lihat Variabel alur pesan.
Variabel alur pesan mengikuti konvensi ini:
graphql.(root-index).(root definition)[(sub-indices).(child-definitions)…]
dengan:
- graphql: Awalan statis yang menunjukkan bahwa ini adalah variabel alur pesan terkait graphQL
- root-Index: indeks berbasis yang menunjukkan indeks definisi kueri tingkat root (default hingga 4 per permintaan)
- root-definition: Isi pesan permintaan GraphQL tingkat root, argumen, nilainya
- sub-indices: Indeks turunan
- child-definitions: Definisi tingkat daun yang berkorelasi dengan kolom tertentu dan nilainya
Representasi dalam variabel alur pesan definisi operasi
| Kolom dalam pesan | Jenis | Deskripsi | 
|---|---|---|
| nama | String | Nama operasi graphQL. Perhatikan bahwa nama ini tidak terkait dengan nama dalam alur pesan. | 
| definisi | String - Operasi | Menunjukkan bahwa ini berisi isi pesan utama dari permintaan kueri | 
| operationType | kueri atau mutasi | Jenis operasi yang sedang dilakukan. | 
| variableDefinition | Bilangan bulat | Mereka berfungsi seperti definisi argumen untuk fungsi dalam bahasa yang diketik. Bagian ini mencantumkan semua variabel, yang diawali dengan $, diikuti dengan jenisnya. | 
| perintah | Bilangan bulat | @include dan @skip adalah dua direktif yang saat ini ditawarkan, yang dapat memfilter berdasarkan nilai yang diteruskan secara dinamis. | 
| selectionSet | Bilangan bulat | Pengelompokan logis satu tingkat dari semua atribut yang terkait dengan objek. | 
Representasi dalam alur pesan definisi fragmen
| Nama Variabel Alur Pesan | Jenis | Deskripsi | 
|---|---|---|
| nama | String | Nama fragmen. | 
| definisi | String-fragmen | Menunjukkan bahwa isi permintaan adalah fragmen untuk permintaan utama. | 
| typeCondition | String | Kondisi saat fragmen dipanggil. | 
| variableDefinition | Bilangan bulat | Definisi variabel yang diteruskan sebagai argumen ke fragmen. | 
Contoh representasi variabel alur pesan
Contoh berikut menunjukkan representasi variabel alur pesan untuk payload permintaan sampel.
Contoh kueri 1
Contoh ini menunjukkan kueri yang dibuat dengan argumen yang diteruskan sebagai input, yang membuat kueri untuk tiga atribut karyawan.
{
 employee(id: 123) {
   id
   firstName
   lastName
 }
}Tabel ini menunjukkan representasi variabel alur pesan yang sesuai.
| Variabel alur pesan | Nilai | 
|---|---|
| graphql.operation.operationType | QUERY | 
| graphql.fragment.count | 1 | 
| graphql.operation.selectionSet.count | 1 | 
| graphql.operation.variableDefinitions.count | 0 | 
| graphql.operation.selectionSet.1.name | employee | 
| graphql.operation.selectionSet.1.argument.count | 1 | 
| graphql.operation.selectionSet.1.argument.1.name | id | 
| graphql.operation.selectionSet.1.argument.1.value | IntValue{value=123} | 
| graphql.operation.selectionSet.1.directive.count | 0 | 
| graphql.operation.selectionSet.1.selectionSet.count | 3 | 
| graphql.operation.selectionSet.1.selectionSet.1.name | id | 
| graphql.operation.selectionSet.1.selectionSet.2.name | firstName | 
| graphql.operation.selectionSet.1.selectionSet.3.name | lastName | 
Contoh kueri 2
Contoh ini menunjukkan kueri yang dibuat dengan argumen yang diteruskan sebagai input, yang mengkueri nama teman.
query Characters($episode: Episode, $withFriends: Boolean!) {
   friends @include(if: $withFriends) {
     friendsName
    }
}Tabel di bawah menunjukkan representasi variabel alur pesan yang sesuai.
| Variabel alur pesan | Nilai | 
|---|---|
| graphql.operation.operationType | QUERY | 
| graphql.operation.selectionSet.count | 1 | 
| graphql.operation.name | Characters | 
| graphql.fragment.count | 0 | 
| graphql.operation.selectionSet.1.name | friends | 
| graphql.operation.variableDefinitions.count | 2 | 
| graphql.operation.variableDefinitions.1.name | episode | 
| graphql.operation.variableDefinitions.1.type | TypeName{name='Episode'} | 
| graphql.operation.variableDefinitions.2.name | withFriends | 
| graphql.operation.variableDefinitions.2.type | NonNullType{type=TypeName{name='Boolean'}} | 
| graphql.operation.selectionSet.1.argument.count | 0 | 
| graphql.operation.selectionSet.1.selectionSet.count | 1 | 
| graphql.operation.selectionSet.1.selectionSet.1.name | friendsName | 
| graphql.operation.selectionSet.1.directive.count | 1 | 
| graphql.operation.selectionSet.1.directive.1.argument.1.name | if | 
| graphql.operation.selectionSet.1.directive.1.argument.1.value | VariableReference{name='withFriends'} | 
Contoh kueri 3
Contoh ini memiliki definisi variabel dengan alias.
query getUsers {
  admins: users(role: ADMIN) {
    lastName
  }
  accountants: users(role: ACCOUNTANT) {
    firstName
  }
}Tabel di bawah menunjukkan representasi variabel alur pesan yang sesuai.
| Variabel alur pesan | Nilai | 
|---|---|
| graphql.operation.operationType | QUERY | 
| graphql.operation.selectionSet.count | 2 | 
| graphql.operation.selectionSet.1.name | users | 
| graphql.operation.selectionSet.1.alias | admins | 
| graphql.operation.variableDefinitions.count | 0 | 
| graphql.operation.selectionSet.1.argument.count | 1 | 
| graphql.operation.selectionSet.1.argument.1.name | role | 
| graphql.operation.selectionSet.1.argument.1.value | EnumValue{name='ADMIN'} | 
| graphql.operation.selectionSet.1.argument.2.name | null | 
| graphql.operation.selectionSet.1.argument.2.value | null | 
| graphql.operation.selectionSet.1.selectionSet.count | 1 | 
| graphql.operation.selectionSet.1.selectionSet.count | 1 | 
| graphql.operation.selectionSet.1.selectionSet.1.name | lastName | 
| graphql.operation.selectionSet.1.selectionSet.1.alias | null | 
| graphql.operation.selectionSet.1.selectionSet.2.name | null | 
| graphql.operation.selectionSet.1.selectionSet.2.alias | null | 
| graphql.operation.selectionSet.1.directive.count | 0 | 
| graphql.operation.selectionSet.1.directive.1.argument.1.name | null | 
| graphql.operation.selectionSet.1.directive.1.argument.1.value | null | 
| graphql.operation.selectionSet.2.name | users | 
| graphql.operation.selectionSet.2.alias | accountants | 
| graphql.operation.selectionSet.2.argument.count | 1 | 
| graphql.operation.selectionSet.2.argument.1.name | role | 
| graphql.operation.selectionSet.2.argument.1.value | EnumValue{name='ACCOUNTANT'} | 
| graphql.operation.selectionSet.2.selectionSet.count | 1 | 
| graphql.operation.selectionSet.2.selectionSet.1.name | firstName | 
| graphql.operation.selectionSet.2.directive.count | 0 | 
| graphql.operation.selectionSet.2.selectionSet.1.alias | null | 
| graphql.operation.selectionSet.2.selectionSet.2.name | null | 
| graphql.operation.selectionSet.2.selectionSet.2.alias | null | 
| graphql.operation.selectionSet.2.directive.count | 0 |