Architecture Patterns for FAIR-Enabling Services

I’ve been trying to grok architecture patterns as presented by Percival and Gregory1 to support domain-driven design and event-driven microservices with Python. I hope you find the diagram below useful.

Relating domain-driven design, event-driven microservices, command-query responsibility segregation (CQRS) + views, and validation (of syntax, semantics, and pragmatics)

A microservices approach seems apt for FAIR-enabling services that need to be composed, flexibly, for any given research artifact’s digital lifecycle. Consider these services:

Consider how you may want to swap one technology choice for a given FAIR-enabling service with another choice, at any time, as part of evolving FAIR infrastructure to which you connect in order to collaborate on and publish / share research artifacts.


  1. H. J. W. Percival and R. G. Gregory, Architecture patterns with Python: enabling test-driven development, domain-driven design, and event-driven microservices, First edition. O’Reilly, 2020. (available online). ↩︎

  2. Example: “Arklet - A basic ARK resolver.” Internet Archive, Oct. 14, 2022. Accessed: Oct. 17, 2022. [Online]. Available: https://github.com/internetarchive/arklet ↩︎

  3. principle addressed: F — Findable, A — Accessible, I — interoperable, R — reusable. ↩︎

  4. Example: “Elasticsearch”. https://www.elastic.co/elasticsearch/ ↩︎

  5. Example: “Amazon Simple Storage Service (Amazon S3)”. https://aws.amazon.com/s3/ ↩︎

  6. Example: “Transactor | Datomic.” https://docs.datomic.com/on-prem/overview/transactor.html (accessed Oct. 17, 2022). https://docs.datomic.com/on-prem/overview/transactor.html ↩︎

  7. Example: “DataHarmonizer.” Centre for Infectious Disease and One Health, Aug. 08, 2022. Accessed: Oct. 17, 2022. [Online]. Available: https://github.com/cidgoh/DataHarmonizer ↩︎

  8. Example: “git - the stupid content tracker.” https://git-scm.com/docs/git (accessed Oct. 17, 2022). ↩︎