api-service-sparql
v0.3.8
Published
REST API for named sparql queries
Downloads
1
Readme
A6S API: sparql Query API
This API uses named sparql queried to create a API adapter into the Governance Graph.
It's implemented as a microservice that maps URL sub-paths to named sparql queries.
The config/default.yaml is used to configure the chassis, specificially the 'sparqlclient' plugin.
The built-in "openapi" plugin is used to map /:query/ requests to the 'sparqlclient' operation.
Query Processing
The ./sparql/ folder contains a set of named sparql queries.
The API path is parsed to extract the named query.
The requests query parameters can be bound to named query variables.
Consider the query "this.sparql":
SELECT DISTINCT ?name ?value WHERE { ?this ?name ?value}
The "?this" variable can be bound at request time using the "?this" query parameter:
CURL http://localhost:7000/gg/this?this=http://example.com/
Special Variable: ?this
All query parameters are interpreted as string literals except for ?this which is always converted into a URI.
SparqlClient plugin
The sparqlclient is an opionated way to execute sparql queries:
- translates a query name into a sparql filename
- read sparql file from "queryPath" folder
- forward the sparql query to the remote endpoint
- format the results
- handle errors
Options
The "sparqlclient" options can be specified as a global config or within relevent the "openapi" definition.
sparqlclient:
endpoint: http://localhost:8080/rdf4j-server/repositories/example
queryPath: "./sparql"
ns:
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs: http://www.w3.org/2000/01/rdf-schema#
dc: http://purl.org/dc/elements/1.1/
eg: http://www.example.org/
The "endpoint" refers to an external sparql 1.x HTTP endpoint. The "queryPath" refers to the folder containing the sparql queries. The "ns" is a namespace map used as defaults for the sparql queries.
openapi plugin
The chassis is configured by an OpenAPI definition. The "operationId" fields must be mapped to a valid plugin.
The "operationId" can be used in more than one path - which is different from the Swagger/Open API specification.
openapi:
paths:
/healthz:
get:
chassis:
operationId: heartbeat
/swagger:
get:
chassis:
operationId: apidocs
/types:
get:
chassis:
operationId: SPARQL
params:
query: rdfs_types
"/:query":
get:
chassis:
operationId: SPARQL
For example:
$ npm install && npm start
$ curl -v http://localhost:7001/types
This /types/ API is mapped to the rdfs_types.sparql file in the ./sparql/ folder.
Governance Graph
The govgraph.ttl file contains a a6s:Solution graph describing the OpenAPI and it's runtime components.
:api-service-sparql
a a6s:Solution;
a k8s:DockerImage;
a k8s:HelmChart;
dc:title "A6S APIs: Core Insights";
k8s:name "api-service-sparql";
a6s:feature <https://api.apigeeks.com/v1/gg/sparql/:query>;
a6s:feature <https://api.apigeeks.com/v1/gg/healthz/sparql>;
a6s:feature <https://api.apigeeks.com/v1/gg/openapi/sparql>;
.
Docker Demo
docker run --rm -p 8080:8080 yyz1989/rdf4j
curl -H "Content-Type: application/json" -X POST --data '{"this":"https://api.apigeeks.com/v1/gg/openapi/sparql/"}' http://localhost:7001/gg/this