Hello! While working on the Distribution API I noticed some code smells that I would like to discuss and see if we have a solution already implemented in any Sling repository:
- *Java/JSON serialization* Currently, we are implementing our own serializer in the form of a generic utils class: ServletJsonUtils.java <https://github.com/apache/sling-org-apache-sling-distribution-core/blob/master/src/main/java/org/apache/sling/distribution/servlet/ServletJsonUtils.java>. This means more code to maintain and higher complexity if we want to change the format of the JSON responses. *Are we already using any JSON serialization library out there?* Was this done on purpose to reduce dependencies? - *JSON response data types* Every JSON response in the API is built on-demand in the servlet layer <https://github.com/apache/sling-org-apache-sling-distribution-core/blob/master/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java#L119>. This is contributing to increased complexity in these endpoints and makes it hard to efficiently grasp how the API works. This is an opinionated topic, but I tend to enjoy APIs that have well-defined request/response objects since the behavior becomes very easy to understand, and it increases readability in the transport layer. *What do you think?* Are we implementing a similar pattern elsewhere? Cheers, José Correia
