Data Strictness
The recommendations for this section are designed to allow the least amount of friction in the data exchange while still ensuring data are valid.
Schema Validation
With respect to a given API Specification document, an Ed-Fi API:
Must reject any POST or PUT request body that is missing a required attributes.
Must accept and store all required and optional attributes in a POST or PUT request body, and serve those fields as a valid document in response to GET requests.
Should ignore extra attributes in a POST or PUT request body that are not defined in the API specification.
Should not store extra attributes or include them in response to GET requests.
In many API applications, extra attributes would be rejected with status code 400 (BadRequest). In an Ed-Fi API, this allowing these extra attributes is encouraged so that API clients are more likely to remain compatible across variations in the API specification. For example:
A source system vendor operates in two states. One of those states has extended
student
to include extra attributes. The vendor is able to send the same request body in both cases, knowing that the API application in the state without the extension will simply ignore the extra attributes.A minor update is made to the Ed-Fi Data Standard, adding an optional attribute to a
student
. An API client is programmed to send the new attribute, and it continues to interoperate without fail when accessing older API implementations that have yet to accept hte minor Data Standard update.
Case Sensitivity
An Ed-Fi API should enforce case sensitivity of property names in POST
and PUT
request bodies. All implementations must use the proper casing in responses to GET
requests.
The Uniform Resource Locators (URLs) section describes that URLs should not be case sensitive, which is seemingly at odds with the requirement above. The URL insensitivity provides backwards compatibility with prior versions of these Guidelines. Case sensitivity in the document structure was not previously addressed. Requiring proper casing in GET
responses ensures consistency for API consumer clients and downstream reporting and analytics systems.
Ideally, an Ed-Fi API should treat property values as case insensitive. For example, the local course codes "MATH-01" and "math-01" would be treated as exactly equivalent. By implication, if a system contains a Course
with a LocalCourseCode
of "MATH-01", then that system ought to accept "math-01" and other variants interchangeably in place of "MATH-01". This requirement is not mandatory because it may be impractical in some data stores.
Inference
All data types must be enforced while validating POST and PUT request bodies. An application could make reasonable inferences, so long as the response to a GET request contains the correct data type. Inference is not a preferred behavior, as it can lead to a fragmented landscape where some applications accept inferred values and others do not. It is, however, accepted here for legacy reasons: the Ed-Fi ODS/API Platform infers data types; this was likely an outcome of the programming framework rather than an intentional design feature.
Reasonable inferences include:
Data Type | Alternate Value | Inferred Value |
---|---|---|
Boolean | 1 | true |
Boolean | "1" | true |
Boolean | "true" | true |
Boolean | 0 | false |
Boolean | "0" | false |
Boolean | "false" | false |
Numeric | "1" | 1 |
Numeric | "1.234" | 1.234 |
DateTime
All API endpoints with date/time properties should require both the date and time, not just a date. Otherwise, a system is likely to infer midnight, which may not be accurate. The value should include the timezone/offset. See RFC 3339 for detailed guidance on proper formatting of datetime
type fields. Typical examples of validate datetime
fields:
2021-09-28T15:00:00Z
, that is, 3:00 PM in UTC on September 28, 2021.2021-09-28T15:00:00-06:00
, which is 3:00 PM in CST (central standard) on September 28, 2021.