apollo-datasource-filemaker
v1.6.7
Published
Apollo Datasource Library for FileMaker Data API
Downloads
7
Readme
Apollo Datasource Library for FileMaker Data API
This provides a javascript API which can be used within resolver functions to fetch data from a filemaker server in a uniform way.
This library is written in TypeScript (a variant of Javascript written by Microsoft) and either ran using ts-node (for dev) or compiled to plain javascript through tsc to generate a distributable package.
import express from "express";
import { ApolloServer, makeExecutableSchema, gql } from "apollo-server-express";
import { FileMakerDataAPI } from "apollo-datasource-filemaker";
const app = express();
app.use(cors());
const apollo = new ApolloServer({
context: apolloServerContext,
dataSources: () => ({
filemakerAPI: new FileMakerDataAPI({
database: "FM_DATABASE_NAME",
hostname: "FM_HOSTNAME",
username: "Admin",
password: "TESTPASSWORD",
strict_https: true,
}),
secondaryDatabaseAPI: new FileMakerDataAPI({
database: "FM_DATABASE_NAME_2",
hostname: "FM_HOSTNAME",
username: "Admin",
password: "TESTPASSWORD",
strict_https: true,
}),
}),
typeDefs: gql`
type Query {
getXYZRecords: [XYZRecord]
getABCRecords: [ABCRecord]
}
`,
resolvers: {
getXYZRecords(_, { arg2 = null, arg3 = null }, {dataSources: { filemakerAPI }}, info) => filemakerAPI.findRecords({ layout: `XYZ`, query: [{"trait1": "static", "trait2": arg2, "trait3": arg3}]})
}
}
apollo.applyMiddleware({ app, path: urlRoot, cors: true });
app.listen({ port: 4000 }, ()=>{
console.log("server is listening on http://localhost:4000")
})
;
You can re-write the resolver to something more readable:
const resolverFunctionXYZ = (_, args, context, info) => {
const { dataSources } = context;
const { filemakerAPI } = dataSources;
const { uuid, pubId } = args;
return filemakerAPI.findRecords({
layout: "FILEMAKER_LAYOUT_NAME",
sort: [
{
fieldName: "FILEMAKER_FIELD_TO_SORT_BY", sortOrder: "ascend"
},
],
query: [
{
"show": "1",
"uuid": uuid,
"pubID": pubId
},
],
});
You can see the API documentation for your server here: https://server-address.local/fmi/data/apidoc/
replacing server-address.local with your server's IP or hostname
This library includes a suite of tests (in *.spec.ts files) which tests the libraries functionality against a very basic FileMaker database.
Execute tests with:
npm test
Generate a test coverage report using this command:
npm run coverage