Apollo-link-rest: Un posible soporte para Dgraph a través de un punto final HTTP sin procesar

Creado en 6 nov. 2018  ·  7Comentarios  ·  Fuente: apollographql/apollo-link-rest

Esto sería como una mezcla de GraphQL con GraphQL + - de Dgraph. Sin embargo, si pudiéramos inyectar la consulta Dgraph como lo hacemos en cURL. Dgraph sería totalmente compatible con Apollo.

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

Más información en: https://docs.dgraph.io/clients/#raw -http

p.ej;

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

`` JS const query = gql
consulta Dgraph {
apartamentos (func: eq (barrio.nombre, "Lutyens")) @rest (tipo: "consulta", ruta: "consulta", punto final: "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

Salud.

enhancement💡

Todos 7 comentarios

Descubrí que podemos pasar la consulta Dgraph a través del "Cuerpo sin formato" en Postman. Así que esa es una señal de que tal vez sea posible que Dgraph funcione con apollo-link-rest

PD. Creo que el "bodyBuilder: $ customBuilder" puede ser el camino. Pero no estoy seguro de cómo funciona.

image

Por cierto, puedes probar contra https://play.dgraph.io/query
simplemente apunte al cartero a ese punto final, establezca "POST" y en Cuerpo establezca RAW y pegue la consulta a continuación.

Preste atención a que el UID puede cambiar en el futuro

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

Suena como un gran proyecto. - No creo que la parte difícil sea usar apollo-link-rest - como dijiste, básicamente está usando customBodyBuilder , o usando una implementación customFetch . - Creo que la parte difícil será "generar" las cargas útiles correctas compatibles con Dgraph .

Háganos saber lo que averiguó, pero me parece que necesitará hacer un "Generador de consultas" bastante extenso que se usaría como una implementación customFetch.

Dgraph es una base de datos que tiene su lenguaje inspirado en GraphQL. Se llama "GraphQL + -". Es un gráfico de base de datos con un lenguaje de gráficos. Sin embargo, hay muchas funciones que no existen en GraphQL, pero que siguen siendo compatibles. Y de hecho es un gran proyecto.

Creo que podemos trabajar en Dgraph para admitir apollo-link-rest, pero quería entender si ya puedo hacer algo con lo que está disponible (como un "Hack"). No encontré ningún ejemplo personalizable que pudiera enviar el "Cuerpo" como ejemplifiqué usando Postman.

Inyectar el cuerpo con texto RAW sería una manera fácil de hacer que Dgraph funcione con apollo-link-rest. Porque la respuesta está en JSON. No hay ningún secreto.

Al mirar este proyecto de Apollo, veo un gran potencial con Dgraph.

Salud.

@MichelDiz : si ese es el caso, casi parece que querrás bifurcar apollo-link-rest y hacer apollo-link-dgraph

Posiblemente, la mejor solución podría ser bifurcar apollo-link-http ? - ¿Esa capa habla GraphQL, por lo que generar una salida similar a GraphQL desde GraphQL podría ser más fácil?

No estoy seguro acerca de apollo-link-http, porque Dgraph GraphQL + - aunque no es compatible con graphql-tag.

Lo había intentado antes sin éxito con el enlace de Apollo con el punto final de Dgraph, y el cuerpo de la solicitud es diferente. Si bien / graphql acepta la consulta en "clave de consulta", Dgraph no tiene un campo "Consulta", solo uno RAW. Pero creo que esto se puede evaluar. No soy el desarrollador de Dgraph (go lang), pero estoy hablando de esta situación con el equipo.

Entonces, las principales diferencias son la etiqueta graphql y la posición de la carga útil de la consulta. Como apollo-link-rest también usa graphql-tag, pensé en crear una directiva @ 'para inyectar la consulta Dgraph (como cuerpo) y usar GraphQL también. Al igual que lo hace en "ruta:". Pero esto es solo una especulación. La idea aún es prematura.

p.ej:

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

A continuación se muestra la diferencia entre el cuerpo de solicitud de Dgraph y 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++

GraphQL + de Dgraph -

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

Ir directamente a DGraph desde el cliente parece un desafío, y puede que no deje espacio para conceptos como autorización o lógica empresarial. No es que no tenga utilidad, seguro: un enlace como el que describe sería excelente para crear un cliente que explore fácilmente un gráfico público directamente.

Estoy interesado en usar DGraph como el almacén de datos principal para una aplicación de consumidor, por lo que estoy adoptando un enfoque diferente y tratando de hacer que sea muy fácil conectar una aplicación estándar de Apollo Server a un backend de DGraph convirtiendo las consultas entrantes de GraphQL en consultas de DGraph. usando un AST personalizado (inspirado en proyectos como join-monster ). Sin embargo, todavía estoy escribiendo la idea en la pizarra en mi tiempo libre, por lo que no hay promesas en la entrega.

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

Quizás cualquier capa de conversión de consultas que cree también podría ser portátil al lado del cliente, de modo que podría extraerse en una biblioteca reutilizable que un hipotético apollo-link-dgraph también podría utilizar. Sin embargo, actualmente confío bastante en poder leer el esquema en sí para generar ese AST.

¿Fue útil esta página
0 / 5 - 0 calificaciones