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 sufijoConnection
, 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 } } }