Base Setup - vets-api
Introduction
This details the base setup needed to run Vets API locally. This project provides common APIs for applications that live on VA.gov (formerly http://vets.gov APIs).
For frontend, see the vets-website, content-build, and vagov-content repos.
Base setup
Clone the
vets-api
repo:CODEgit clone https://github.com/department-of-veterans-affairs/vets-api.git
Setup key & cert for localhost authentication to ID.me:
Create a folder in your vets-api directory:
CODEmkdir config/certs touch config/certs/vetsgov-localhost.crt touch config/certs/vetsgov-localhost.key
Copy example configuration file:
CODEcp config/settings.local.yml.example config/settings.local.yml
Edit
config/settings.local.yml
to disable signed authentication requests:CODE# settings.local.yml saml: authn_requests_signed: false
If you are developing features that need Sidekiq Enterprise, you must have access to the va.gov-team-sensitive repo and install the sidekiq enterprise license
Sidekiq Enterprise is used for worker rate limiting and additional reliability in production and requires a license be configured on your development machine. If you do not have a license configured, the open source version of Sidekiq will be installed instead. This is not an issue unless you are specifically developing features that need Sidekiq Enterprise.
DO NOT commit local Gemfile modifications that remove the
sidekiq-ent
andsidekiq-pro
gems.Developers who work with vets-api daily tend to prefer the native setup because they don't have to deal with the abstraction of docker-compose while those who would to spend less time on getting started prefer the docker setup. Docker is also useful when it's necessary to have a setup as close to production as possible. Finally, it's possible to use a hybrid setup where you run vets-api natively, but run the Postgres and Redis dependencies in docker.
(OSX/Ubuntu)
Running the app
Configuration
Vets API is configured with Config. The default configuration is contained in settings.yml. To customize your setup, you can create a config/settings.local.yml
file with configuration specific to your needs. For example, to configure Redis and PostgreSQL (PostGIS is required), place something like this in that file:
database_url: postgis://pg_host:9999/custom_db
redis:
host: redis_host
port: 9999
This is also where you will place any other customizations, such as API tokens or certificate paths.
Config settings that vary in value depending on the deployment environment will also need to be set appropriately for each environment in the relevant devops (Private Repo) configurations (dev-, staging-, and prod-settings.local.yml.j2).
Some examples of configuration that will need to be added to these files are:
API keys/tokens
3rd party service hostnames, ports, and certificates/keys.
Betamocks settings
Optional application configuration
The following features require additional configuration, click for details.
To mock one or more of the above services see Betamocks
Vets API will still run in a limited capacity without configuring any of these features, and will run the unit tests successfully.
Deployment instructions
BRD
Jenkins deploys vets-api
upon each merge to master
:
http://jenkins.vfs.va.gov/job/testing/job/vets-api/job/master/ (Requires SOCKS)
Each deploy is available here:
https://dev-api.va.gov/v0/status (publicly available)
Additional deployment details can be found here:
EKS
ArgoCD deploys vets-api
upon each merge to master
See deploy process details here
API request key formatting
When sending HTTP requests use the X-Key-Inflection
request header to specify which case your client wants to use. Valid cases are camel
, dash
, and snake
. For example if you set X-Key-Inflection: camel
then you can use camelCase keys in your JSON request body and you will get back data with camelCase keys in the response body. If the header is not provided then the server will expect snake_case keys in the request body and output snake_case in the response.
Versions
The version of Ruby and gem dependencies (including Rails) used are defined in the included Gemfile. The currently used versions of gems are maintained with Bundler and stored in the Gemfile.lock.
Version Policy
The goal is to have vets-api use supported versions of gems and Ruby, which is often the latest. However the versions are generally updated as need or availability arise. If you need a newer version of a gem, please submit a pull-request marked as draft
with just the gem updated and passing tests.
Help and feedback
Get help from the Platform Support Team in Slack.
Submit a feature idea to the Platform.