Guía de estilo de servicios de GraphQL

Tipos

GraphQL tiene ciertos tipos, escalares, los cuales son:

  • Int
  • Float
  • String
  • Boolean
  • ID

Estos tipos son finales y son devueltos en cualquier consulta hecha. Además de estos tipos escalares se pueden implementar los necesarios para construir un servicio, por ejemplo el tipo escalar DateTime que corresponde a una fecha y hora, muy usada para representar el último momento de modificación de un dato.

Nombrando tipos

Todos los nombres de tipos DEBEN estar en PascalCase esto es debe de llevar mayúscula cada palabra del tipo, por ejemplo:

  • FechaHora
  • EjemplarSNIB
  • Taxon
  • TaxonConnection
  • ConjuntoDeDatos

Conexiones

Las conexiones se refieren a un conjunto de aristas que conectan un nodo con otros. Toda conexión DEBE llevar el nombre del tipo del nodo destino con el sufijo Connection, como en el ejemplo anterior para el tipo Taxon.

Búsquedas

El core de GraphQL son las búsquedas se recomiendan las siguientes reglas para los servicios de CONABIO que resuelvan estas.

Sobre el nombre de búsquedas y campos

A diferencia del nombrado de tipos, para las búsquedas y sus campos se DEBE usar camelCase esto es la primera palabra en minúscula y las subsecuentes con mayúsculas. Algunos ejemplos son:

  • searchTaxon
  • searchEjemplarSNIB
  • ultimaModificacion
  • taxon
  • id

Campos relacionados entre tipos

Los tipos de datos que tengan relación con otros DEBEN nombrar los campos de relación con el nombre del tipo más el sufijo ID, por ejemplo:

Un dato de tipo EjemplarSNIB tiene asociado el nombre de un Taxon entonces uno de los campos del tipo EjemplarSNIB debe ser taxonID.

Esto solo aplica para relaciones uno a uno, para relaciones uno a muchos o muchos a muchos se DEBE tener el nombre del tipo en plural pero el tipo de asociado a la resolución de esta conexión debe ser <tipo relacionado>+Se, por ejemplo:

Un dato de tipo Taxon tiene asociados varios nombresComunes los cuales al ser consultado son devueltos en un tipo NombreComunConnection.

Búsquedas presentes

Todos los tipos de datos que se consideren de importancia para dar acceso a los datos de CONABIO DEBEN poder resolver dos búquedas, la asociada a obtener un dato por medio de su identificador único y la búqueda sobre ese tipo la cual debe regresar una conexión de ese tipo para hacer la paginación de los resultados.

Por ejemplo un Taxon debe poder contestar a las siguientes búsquedas:

{
  taxon(id: "3954ANGIO"){
    id
    scientificName
    taxonRank
  }
}

y

{
  searchTaxon(query:"Zea mays", first: 10){
    totalCount
    edges {
	  cursor
      node {
        id
        scientificName
        taxonRank
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}