Sets up an API with data from Serviceplatformen Organisation.
The API has no authentication methods and should not be exposed to the web.
The objects from SF1500 that we are interested in are
Person, Bruger, Adresse, OrganisationFunktion and OrganisationEnhed.
Each of these come with an identifier and at least one Registrering.
See SF1500 objects
and object model.
We create views combining information from objects, resulting in the following views which will serve as the base for our API.
| View | Columns | 
|---|---|
| bruger | id, az, navn, email, telefon, lokation | 
| funktion | id, bruger_id, funktionsnavn, enhedsnavn, adresse, tilknytted_enhed_id, funktions_type | 
| organisation | id, enhedsnavn, overordnet_id | 
To get a local copy up and running follow these steps.
- 
Clone the repo git clone [email protected]:itk-dev/serviceplatformen_organisation_api.git 
- 
Pull docker images and start docker containers docker compose pull docker compose up --detach 
- 
Install composer packages docker compose exec phpfpm composer install
- 
Run database migrations docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
You should now be able to browse to the api
open "http://$(docker compose port nginx 8080)/api"Configure the following environment variables in .env.local
###> serviceplatformen ###
# Certificate options
SF1500_ORGANISATION_CERTIFICATE_LOCATOR_TYPE=APP_SF1500_ORGANISATION_CERTIFICATE_LOCATOR_TYPE
# LOCATOR_TYPE Should be 'azure_key_vault' or 'file_system'.
SF1500_ORGANISATION_CERTIFICATE_PATH=APP_SF1500_ORGANISATION_CERTIFICATE_PATH
SF1500_ORGANISATION_CERTIFICATE_TENANT_ID=APP_SF1500_ORGANISATION_CERTIFICATE_TENANT_ID
SF1500_ORGANISATION_CERTIFICATE_APPLICATION_ID=APP_SF1500_ORGANISATION_CERTIFICATE_APPLICATION_ID
SF1500_ORGANISATION_CERTIFICATE_CLIENT_SECRET=APP_SF1500_ORGANISATION_CERTIFICATE_CLIENT_SECRET
SF1500_ORGANISATION_CERTIFICATE_NAME=APP_SF1500_ORGANISATION_CERTIFICATE_NAME
SF1500_ORGANISATION_CERTIFICATE_SECRET=APP_SF1500_ORGANISATION_CERTIFICATE_SECRET
SF1500_ORGANISATION_CERTIFICATE_VERSION=APP_SF1500_ORGANISATION_CERTIFICATE_VERSION
SF1500_ORGANISATION_CERTIFICATE_PASSPHRASE=APP_SF1500_ORGANISATION_CERTIFICATE_PASSPHRASE
# Other options
SF1500_ORGANISATION_AUTHORITY_CVR=APP_SF1500_ORGANISATION_AUTHORITY_CVR
SF1500_ORGANISATION_STS_APPLIES_TO=APP_SF1500_ORGANISATION_STS_APPLIES_TO
SF1500_ORGANISATION_TEST_MODE=APP_SF1500_ORGANISATION_TEST_MODE
SF1500_ORGANISATION_MANAGER_ROLE_UUID_TEST=APP_SF1500_ORGANISATION_MANAGER_ROLE_UUID_TEST
SF1500_ORGANISATION_MANAGER_ROLE_UUID_PROD=APP_SF1500_ORGANISATION_MANAGER_ROLE_UUID_PROD
###< serviceplatformen ###Before fetching data the database should be emptied. If not, objects that were available during both fetches will appear twice.
docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction first
docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interactionTo fetch data from SF1500 run
docker compose exec phpfpm bin/console organisation:fetch:data DATATYPES --page-size=PAGE-SIZE --max=MAXfor help run
docker compose exec phpfpm bin/console organisation:fetch:data --helpTo avoid issues with memory leaks during development add the
--no-debug flag to the fetch data command. You may also want to
add the verbose flag to see progress.
docker compose exec phpfpm bin/console --no-debug organisation:fetch:data -vvvSee
open "http://$(docker compose port nginx 8080)/api"for api specifics.
curl "http://$(docker compose port nginx 8080)/api/v1/bruger?page=1&navn=Jeppe%20Kuhlmann"Search parameters
| Name | Type | Example | 
|---|---|---|
| navn | Text | navn=Jeppe%20Kuhlmann | 
| az | Text | az=az12345 | 
| Text | email=jeppe%40test.dk | |
| telefon | Text | telefon=12345678 | 
| lokation | Text | lokation=ITK | 
curl "http://$(docker compose port nginx 8080)/api/v1/bruger/ffdb7559-2ad3-4662-9fd4-d69849939b66"Here ffdb7559-2ad3-4662-9fd4-d69849939b66 should be a bruger identifier.
curl "http://$(docker compose port nginx 8080)/api/v1/bruger/ffdb7559-2ad3-4662-9fd4-d69849939b66/funktioner"Here ffdb7559-2ad3-4662-9fd4-d69849939b66 should be a bruger identifier.
To use the API you must use the serviceplatformen_organisation_api_app
network.
networks:
  organisation_api:
    external: true
    name: serviceplatformen_organisation_api_app
services:
  phpfpm:
    networks:
      - organisation_api
    ...The API is now available at http://organisation_api:8080 i.e.
curl "http://organisation_api:8080/api/v1/bruger?page=1&navn=Jeppe%20Kuhlmann"The following commands let you test that the code follows the coding standards we decided to adhere to in this project.
- 
PHP files (PHP-CS-Fixer with the Symfony ruleset enabled) docker compose exec phpfpm composer coding-standards-check
- 
Markdown files (markdownlint standard rules) docker compose run --rm node yarn install docker compose run --rm node yarn coding-standards-check 
The following commands let you apply the coding standards we decided to adhere to in this project.
- 
PHP files (PHP-CS-Fixer with the Symfony ruleset enabled) docker compose exec phpfpm composer coding-standards-apply
- 
Markdown files (markdownlint standard rules) docker compose run --rm node yarn install docker compose run --rm node yarn coding-standards-apply 
psalm
docker compose exec phpfpm composer code-analysis