Skip to content

Strategy for dealing with invalid data #1481

Description

@stof

Currently, the way invalid data is handled in value objects and results is quite messy:

  • getters are typed with the expected type of the value
  • when creating the object, missing required fields are initialized to null, which will then throw a TypeError when calling the getter
  • for required timestamp fields, passing a wrong date string will assign false to the property, which also leads to a TypeError when calling the getter
  • for optional timestamp fields, passing a wrong date string will assign null to the property, which means it removes the date
  • for integer/long fields transmitted in headers (only happening in the S3 service among the services we support currently), an invalid integer string assigns false to the property (which also leads to a TypeError when calling the getter)

Additionally, for JSON response parsers, we use filter_var(..., FILTER_VALIDATE_BOOLEAN), which means we first cast the boolean value from the json to string before validating it again. This is quite inefficient way to ensure we have a boolean in the property.

This inconsistency between the expected property type and the assigned value gets caught by static analysis tools in #1467 once I actually define the expected property type in phpdoc.

Note: input objects are already clean in that regard. They define all fields as nullable in a consistent way (getters are also nullable) and validate things when creating the request body.

What should be the strategy to handle those values ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions