This repository contains the official formal definition of the Unified Study Definitions Model (USDM) API.
The API is defined by a set of python classes built using the pydantic library. These classes are then used from within FastAPI. FastAPI allows for the API specificition to be exported using the OpenAPI standard while also being executed as a server.
The repo forms part of the larger DDF USDM project that can be found in the CDISC DDF-RA repo.
To run the server use the command
uvicorn main:app --reload
To generate the OpenAPI specifications in both YAML and JSON format use the script
. ./api_docs.sh
This script employs the openapi.py utility
Attribute names refect the UML model for all simple type attributes and all relationships. Where a relationship is turned into a cross reference (so as not to include the content twice in the serialization) either Id or Ids is appended to the attribute name for 1 to 1 or 1 to many relationship respectively. When Id or Ids is appended the root attribute name may be altered so as to make the new name readble, for example the attribute 'children' becomes 'childIds'.
The following coding style is used in attribute definitions. For required simple type attributes the coding convention used is as follows:
- Required:
attributeName: typeName
- Required (string):
attributeName: str = Field(min_length=1)
- Optional:
attributeName: Union[typeName, None] = None
The convention used for relationships and cardinality is as follows:
- For 1:1:
attributeName: ClassName
- For 1:0..1:
attributeName: Union[ClassName, None] = None
- For 1:1..*:
attributeName: [ClassName]
- For 1:0..*:
attributeName: [ClassName] = []
For cross references (note the addition of 'Id' or 'Ids') the convention is as follows:
- For 1:1:
attributeNameId: str
- For 1:0..1:
attributeNameId: Union[str, None] = None
- For 1:1..*:
attributeNameIds: [str]
- For 1:0..*:
attributeNameIds: [str] = []