Note
forms-api is now deprecated and is no longer a core part of the GOV.UK Forms service. This repository will be archived in the near future. Consider this document out of date and only of use for historical purposes.
forms-api is the API for the GOV.UK Forms platform. It is a Ruby on Rails api app, currently using a Postgresql database for data storage and is used for storing/serving the form configurations that are created by form creators in forms-admin.
To run the project you will need to install:
- Ruby - we use version 3.1 of Ruby. Before running the project, double check the [.ruby-version] file to see the exact version.
- a running PostgreSQL database
We recommend using a version manager to install and manage these, such as:
# 1. Clone the git repository and change directory to the new folder
git clone git@github.com:alphagov/forms-api.git
cd forms-api
# 2. Run the setup command
./bin/setup# Running the server without watching for changes
bundle exec rails sThis will start the server on localhost:9292
The forms-api app is containerised (see Dockerfile) and can be deployed however you would normally deploy a containerised app.
# Run the Ruby test suite
bundle exec rakeRefer to the the config gem to understand the file based settings loading order.
To override file based via Machine based env variables settings
cat config/settings.yml
file
based
settings
env1: 'foo'export SETTINGS__FILE__BASED__SETTINGS__ENV1="bar"puts Settings.file.based.setting.env1
barRefer to the settings file for all the settings required to run this app
This repo supports the ability to set up feature flags. To do this, add your feature flag in the settings file under the features property. eg:
features:
some_feature: trueYou can then use the feature service to check whether the feature is enabled or not. Eg. FeatureService.enabled?(:some_feature).
You can also nest features:
features:
some:
nested_feature: trueAnd check with FeatureService.enabled?("some.nested_feature").
Rspec tests can also be tagged with feature_{name}: true. This will turn that feature on just for the duration of that test.
- HTTP access logs are managed using Lograge and configured within the application config
- The output format is JSON using the JsonLogFormatter to enable simpler searching and visbility especially in Splunk.
- DO NOT use log_tags since it breaks the JSON formatting produced by Lograge.
Use the update_app_versions.sh script in forms-deploy
Raise a Github issue if you need support.
We welcome contributions - please read CONTRIBUTING.md and the alphagov Code of Conduct before contributing.
We use the MIT License.