Apollo-link-rest: Kemungkinan dukungan untuk Dgraph melalui titik akhir HTTP mentah

Dibuat pada 6 Nov 2018  ·  7Komentar  ·  Sumber: apollographql/apollo-link-rest

Ini akan seperti campuran GraphQL dengan GraphQL + - dari Dgraph. Namun, jika kita bisa menyuntikkan Dgraph Query seperti yang kita lakukan di cURL. Dgraph akan sepenuhnya kompatibel dengan Apollo.

curl -X POST -H 'X-Dgraph-LinRead: {"1": 12}' localhost:8080/query -d $'
{
  balances(func: anyofterms(name, "Alice Bob")) {
    uid
    name
    balance
  }
}' | jq

Info lebih lanjut di: https://docs.dgraph.io/clients/#raw -http

misalnya;

const query = gql`
  query Dgraph {
    apartments@rest(type: "query", path: "query", endpoint: "DgraphEnd") {
      bhk
      uid
    }
  }
`;

`` JS const query = gql
kueri Dgraph {
apartemen(fungsi: eq(neighborhood.name, "Lutyens")) @rest(type: "query", path: "query", endpoint: "DgraphEnd") {
bhk
uid
}
}
`;

Mutation example:

```bash
curl -X POST localhost:8080/mutate -H 'X-Dgraph-MutationType: json' -H 'X-Dgraph-CommitNow: true' -d  $'
    {
      "set": [
      {"name": "Alice"},
      {"name": "Bob"}
    ]
      }' | jq

Bersulang.

enhancement💡

Semua 7 komentar

Saya telah menemukan bahwa kita dapat melewati Kueri Dgraph melalui "Tubuh mentah" di Tukang Pos. Jadi itu pertanda bahwa mungkin Dgraph bekerja dengan apollo-link-rest

PS. Saya pikir "bodyBuilder: $customBuilder" mungkin caranya. Tapi saya tidak yakin bagaimana cara kerjanya.

image

BTW Anda dapat menguji melawan https://play.dgraph.io/query
arahkan saja Tukang Pos ke titik akhir itu, atur "POST" dan di Body set RAW dan rekatkan Query di bawah ini.

Perhatikan bahwa UID dapat berubah di masa mendatang

{
  node(func: uid(0x36bb9)) {
    uid
    expand(_all_) {
      uid
      expand(_all_)
    }
  }
}

Ini terdengar seperti proyek besar . -- Saya tidak berpikir bagian yang sulit adalah menggunakan apollo-link-rest -- seperti yang Anda katakan, pada dasarnya menggunakan customBodyBuilder , atau menggunakan implementasi customFetch . -- Saya pikir bagian tersulitnya adalah "menghasilkan" Dgraph - payload yang kompatibel dengan benar.

Beri tahu kami apa yang Anda ketahui -- tetapi bagi saya sepertinya Anda harus membuat "Pembuat Kueri" yang cukup ekstensif yang akan digunakan sebagai implementasi customFetch.

Dgraph adalah database yang bahasanya terinspirasi oleh GraphQL. Ini disebut "GraphQL + -". Ini adalah grafik DB dengan bahasa grafik. Namun, ada banyak fitur yang tidak ada di GraphQL, tetapi masih kompatibel. Dan memang itu proyek besar.

Saya pikir kita dapat bekerja pada Dgraph untuk mendukung apollo-link-rest, tetapi saya ingin memahami apakah saya sudah dapat melakukan sesuatu dengan apa yang tersedia (Seperti "Peretasan"). Saya tidak menemukan contoh yang dapat disesuaikan yang dapat mengirim "Tubuh" seperti yang saya contohkan menggunakan Tukang Pos.

Menyuntikkan Tubuh dengan teks RAW akan menjadi cara mudah untuk membuat Dgraph bekerja dengan apollo-link-rest. Karena responsnya ada di JSON. Tidak ada rahasia.

Melihat proyek Apollo ini, saya melihat potensi besar dengan Dgraph.

Bersulang.

@MichelDiz -- jika itu masalahnya, sepertinya Anda mungkin ingin melakukan fork apollo-link-rest , dan membuat apollo-link-dgraph

Mungkin perbaikan terbaik adalah dengan fork apollo-link-http ? -- lapisan itu berbicara GraphQL, jadi menghasilkan keluaran seperti GraphQL dari GraphQL mungkin paling mudah?

Tidak yakin tentang apollo-link-http, karena Dgraph GraphQL+- tidak kompatibel dengan tag graphql.

Saya telah mencoba sebelumnya tanpa berhasil menekan tautan Apollo dengan titik akhir Dgraph, dan badan permintaan berbeda. Sementara /graphql menerima kueri dalam "kunci kueri", Dgraph tidak memiliki bidang "Kueri", hanya bidang RAW. Tapi saya pikir ini bisa dievaluasi. Saya bukan pengembang Dgraph (go lang), tapi saya sedang membicarakan situasi ini dengan tim.

Jadi perbedaan utama adalah tag graphql dan posisi payload kueri. Karena apollo-link-rest juga menggunakan tag graphql, saya berpikir untuk membuat @'directive untuk menyuntikkan kueri Dgraph (sebagai badan) dan menggunakan GraphQL juga. Sama seperti yang Anda lakukan di "jalan:". Tapi ini hanya spekulasi. Idenya masih terlalu dini.

misalnya:

const dgraphQ = ` 
{ 
  users (func: has(user), first:1000 ) {
   id : uid
   name
   email
}
}
`;

const query = gql`
      query dgraphTest(
        $customBuilder: any
      ) {
        users @rest(type: "User ", bodyBuilder: $customBuilder, method: "POST") { 
                                         #Maybe bodyKey?? I'll test it
          id
          name
          email
        }
      }
    `;

apolloClient.query({
  query: Query,
  variables: {
    input: { customBuilder: dgraphQ }
  }
}).then(response => {
  console.log(response);
});

Di bawah ini adalah perbedaan antara badan permintaan Dgraph dan GraphQL.

GrafikQL

POST /graphql HTTP/1.1
Host: api.githunt.com
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: xxxxx
query=%7B%0A++++feed+(type%3A+NEW%2C+limit%3A+5)+%7B%0A++++++repository+%7B%0A++++++++owner+%7B+login+%7D%0A++++++++name%0A++++++%7D%0A%0A++++++postedBy+%7B+login+%7D%0A++++%7D%0A++%7D%0A++

Dgraph GraphQL+-

POST /query HTTP/1.1
Host: play.dgraph.io
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: xxxxx
{
  node(func: uid(0x36bb9)) {
    uid
    expand(_all_) {
      uid
      expand(_all_)
    }
  }
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

Pergi langsung ke DGraph dari klien tampak seperti tantangan, dan yang mungkin tidak meninggalkan ruang untuk konsep seperti otorisasi atau logika bisnis. Bukannya itu tidak akan memiliki utilitas, pasti--tautan seperti yang Anda gambarkan akan sangat bagus untuk membuat klien yang dengan mudah menjelajahi grafik publik secara langsung.

Saya tertarik menggunakan DGraph sebagai penyimpanan data utama untuk aplikasi konsumen, jadi saya mengambil pendekatan yang berbeda dan mencoba membuatnya sangat mudah untuk menghubungkan aplikasi Apollo Server standar ke backend DGraph dengan mengubah kueri GraphQL yang masuk menjadi kueri DGraph menggunakan AST khusus (terinspirasi oleh proyek seperti join-monster ). Saya masih menulis ide di waktu luang saya, jadi tidak ada janji pengiriman.

https://github.com/a-type/dgraphql

Mungkin lapisan konversi kueri apa pun yang saya buat juga dapat dibawa-bawa ke sisi klien, sehingga dapat diekstraksi ke pustaka yang dapat digunakan kembali yang juga dapat digunakan oleh apollo-link-dgraph hipotetis. Namun, saat ini, saya sangat bergantung pada kemampuan membaca skema itu sendiri untuk menghasilkan AST itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat