Mock API Server
This package facilitates the creation of a mock server that can generate a variety of API responses for use in other services, web applications, or GraphQL SubGraphs. By doing so, it enables the construction of a fundamental data set that can be queried, deleted, updated, and modified at any time when used in conjunction with Service and Federated layers.
Usage
To create a Mock API Server, you can follow the steps outlined below:
Pre-requisites
- Make sure you are on correct version of Nodejs 18.x and Nx Version 16.6
node --version
nx --version
- To start with, create a new GenesisX workspace in an empty directory, run below command, of if you already have the workspace ready , please skip this step.
npx @genesisx/create-workspace
- Provide the requested parameters
- Provide name to your workspace like test-workspace
- Move to the created workspace -
cd test-workspace
- Install the packages
yarn install
- Install Mock API Server package
yarn add @genesisx/mock-api-server
- Now follow either of the two modes(mentioned below) to use this generator - either the Nx Console or CLI
Via Nx Console
Select Generate tool from the Nx Console as shown in the image in your Visual Studio
Navigate to NX console > Generate > @genesisx/mock-api-server
And fill in the form as follows;
appName - GQL Api Mock Service Name that will be under apps folder of your project
portNumber - Port Number to be changed in file called .env
Serve your mock service created through Nx Console > Serve > <your_project_name>
Via Command Line
You may also Generate the plugin via the terminal in absence of the Nx console using the below command
nx generate @genesisx/mock-api-server:templates <mockServerName> <portNumber> --no-interactive
Testing the app
You can test run the newly created app using the Nx Serve command
nx serve <MOCK_API-APP-NAME>
Running build and lints
To execute the lint checks on this package, run
nx lint mock-api-server
To build this package, run
nx build mock-api-server
To execute the unit tests via Jest, run
nx test mock-api-server
Using the mock server in coalition with Sub Graphs (Services and Federated layers)
In order to connect the mock server to Sub Graphs, you will first have to generate the needed services, then some files will have to be updated.
Service
Within a generated <graphql-service-app>
, you will need to use the portNumber of the Mock-api-server you selected earlier
- Open
<workspace-name>/apps/<graphql-service-app>/.env
- Change the attribute within the .env file titled
SERVICE_HOST
to the localhost address of the mock server (i.e if the mock-api-server portNumber is 2300 then this number will be the value of the needed attribute).
Federation
This time navigating to a <graphql-federation-app>
you will need to use the portNumber of the Service app you selected earlier.
- This time navigating to
<workspace-name>/apps/<graphql-federation-app>/.env
- Update the empty
GQL_SERVICE_URL_CUSTOMERS
attribute to equate to the portNumber belonging to thegraphql-service-app
(i.e if the app address is 2400 then this number will be the value of the needed attribute).
Test launching the app including SubGraphs
You can test the subgraph layers using the Nx console
Navigate to Nx Console > Serve > <SERVICE_NAME> or <FEDERATION_NAME>
You can test the service application using the following bash command
nx serve <SERVICE_NAME>
as well as the federated layer with
nx serve <FEDERATION_NAME>
Note - in order to serve each layer without error you must run each command in a separate terminal in the following order
- MOCK SERVER > SERVICE > FEDERATION
Local development and testing
In order to run development tests on your local branch, you will need to build this package and refresh node_modules with every change. This can be done using the bash command below:
yarn nx run mock-api-server:build && cp -R dist/packages/mock-api-server/ <new-wsp>/node_modules/@genesisx
More details & Troubleshooting
Visit the troubleshooting guide for common issues or refer to the readme.md file located within the package folder<workspace-folder>/node_modules/@genesisx/mock-api-server/README.md