Just a couple of comments:<p>On (2): There is a number of Play Swagger plugins (e.g. <a href="https:&#x2F;&#x2F;github.com&#x2F;swagger-api&#x2F;swagger-play" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;swagger-api&#x2F;swagger-play</a>), each with different approaches.<p>On (3): DI can actually be quite practical. Use different implementation via configuration (bind at startup), use fakes for testing, benchmark two implementations before swapping them, etc. Develop to an interface, not to an implementation :)