Apollo-link-rest: دعم محتمل لـ Dgraph من خلال نقطة نهاية HTTP الأولية

تم إنشاؤها على ٦ نوفمبر ٢٠١٨  ·  7تعليقات  ·  مصدر: apollographql/apollo-link-rest

قد يكون هذا بمثابة مزيج من GraphQL مع GraphQL + - من Dgraph. ومع ذلك ، إذا تمكنا من حقن Dgraph Query كما نفعل في cURL. سيكون Dgraph متوافقًا تمامًا مع Apollo.

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

مزيد من المعلومات في: https://docs.dgraph.io/clients/#raw -http

على سبيل المثال ؛

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

" JS const query = gql
الاستعلام Dgraph {
شقق (func: eq (Neighborhood.name، "Lutyens"))rest (النوع: "query" ، المسار: "query" ، نقطة النهاية: "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

هتافات.

enhancement💡

ال 7 كومينتر

لقد اكتشفت أنه يمكننا تمرير Dgraph Query من خلال "Raw body" في Postman. لذا فهذه علامة على أنه ربما يمكن أن يعمل Dgraph مع أبولو-لينك-ريست

ملاحظة. أعتقد أن "bodyBuilder: $ customBuilder" قد يكون هو الحل. لكني لست متأكدًا من كيفية عملها.

image

راجع للشغل يمكنك الاختبار مقابل https://play.dgraph.io/query
ما عليك سوى توجيه ساعي البريد إلى نقطة النهاية هذه ، وتعيين "POST" وفي النص الأساسي ، قم بتعيين RAW والصق الاستعلام أدناه.

انتبه إلى أن UID قد يتغير في المستقبل

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

هذا يبدو وكأنه مشروع كبير . - لا أعتقد أن الجزء الصعب هو استخدام apollo-link-rest - كما قلت ، فهو يستخدم أساسًا customBodyBuilder ، أو باستخدام customFetch . - أعتقد أن الجزء الصعب سيكون "توليد" الحمولات المتوافقة الصحيحة Dgraph .

يرجى إخبارنا بما توصلت إليه - ولكن يبدو لي أنك ستحتاج إلى إنشاء "مولد استعلام" واسع النطاق يمكن استخدامه كتطبيق جلب مخصص.

Dgraph هي قاعدة بيانات لها لغتها المستوحاة من GraphQL. يطلق عليه "GraphQL + -". إنه رسم بياني DB مع لغة الرسم البياني. ومع ذلك ، هناك العديد من الميزات غير الموجودة في GraphQL ، ولكنها لا تزال متوافقة. وهو بالفعل مشروع كبير.

أعتقد أنه يمكننا العمل على Dgraph لدعم apollo-link-rest ، لكنني أردت أن أفهم ما إذا كان بإمكاني فعل شيء ما بما هو متاح (مثل "Hack"). لم أجد أي أمثلة قابلة للتخصيص يمكن أن ترسل "الجسد" كما مثال على ذلك باستخدام Postman.

سيكون حقن الجسم بنص RAW طريقة سهلة لجعل Dgraph يعمل مع apollo-link-rest. لأن الرد بصيغة JSON. ليس هناك سر.

بالنظر إلى مشروع Apollo هذا ، أرى إمكانات كبيرة مع Dgraph.

هتافات.

MichelDiz - إذا كان الأمر كذلك ، يبدو أنك قد ترغب في تفرع apollo-link-rest ، وإنشاء Apollo-link-dgraph

ربما يكون أفضل حل هو تفرع apollo-link-http ؟ - تتحدث هذه الطبقة عن GraphQL ، لذا قد يكون إنشاء إخراج شبيه بـ GraphQL من GraphQL أسهل؟

لست متأكدًا من apollo-link-http ، cuz Dgraph GraphQL + - غير متوافق مع علامة الرسم البياني.

لقد حاولت من قبل دون نجاح النقر على رابط Apollo بنقطة نهاية Dgraph ، ونص الطلب مختلف. بينما يقبل / graphql الاستعلام في "مفتاح الاستعلام" لا يحتوي Dgraph على حقل "استعلام" ، فقط RAW واحد. لكن أعتقد أن هذا يمكن تقييمه. أنا لست مطور Dgraph (go lang) ، لكنني أتحدث عن هذا الموقف مع الفريق.

لذا فإن الاختلافات الرئيسية هي علامة الرسم البياني وموضع حمولة الاستعلام. نظرًا لأن apollo-link-rest يستخدم أيضًا علامة الرسم البياني ، فقد فكرت في إنشاء توجيه @ لحقن استعلام Dgraph (كجسم) واستخدام GraphQL أيضًا. تمامًا كما تفعل في "المسار". لكن هذه مجرد تكهنات. الفكرة لا تزال سابقة لأوانها.

على سبيل المثال:

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);
});

يوجد أدناه الفرق بين نص طلب Dgraph's و GraphQL.

GraphQL

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's 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--

يبدو أن الانتقال مباشرة إلى DGraph من العميل يمثل تحديًا ، وقد لا يترك مجالًا لمفاهيم مثل التفويض أو منطق الأعمال. لا يعني ذلك أنه لن يكون له فائدة ، بالتأكيد - سيكون ارتباطًا كما وصفته رائعًا لإنشاء عميل يستكشف بسهولة الرسم البياني العام مباشرةً.

أنا مهتم باستخدام DGraph كمخزن بيانات أساسي لتطبيق للمستهلك ، لذا فأنا أتبع نهجًا مختلفًا وأحاول أن أجعل من السهل جدًا واجهة تطبيق Apollo Server القياسي إلى واجهة DGraph الخلفية عن طريق تحويل استعلامات GraphQL الواردة إلى استعلامات DGraph باستخدام AST مخصص (مستوحى من مشاريع مثل الانضمام إلى الوحش ). ما زلت أقوم بوضع فكرة على شكل لوح أبيض في وقت فراغي ، على الرغم من ذلك ، لا توجد وعود عند التسليم.

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

ربما تكون أي طبقة تحويل استعلام أقوم بإنشائها قابلة للنقل إلى جانب العميل أيضًا ، بحيث يمكن استخراجها في مكتبة قابلة لإعادة الاستخدام والتي يمكن أن تستخدمها أيضًا apollo-link-dgraph الافتراضية. في الوقت الحالي ، على الرغم من ذلك ، فأنا أعتمد بشكل كبير على القدرة على قراءة المخطط نفسه لإنشاء AST.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات