**Problem**
I am new to MediaWiki's [[ https://www.mediawiki.org/wiki/API:Main_page | Action API ]]. The Action API is extremely flexible and allows you to do a great number of things (that I honestly do not fully understand). However, the learning curve is somewhat steep. It can be difficult to figure out how to do certain things, and difficult to figure out that you //cannot// do certain things. The Action API also does not seem very consistent. Parameter names, ordering, responses etc. can be different depending on the module or even submodule.
The Action API feels completely unique to MediaWiki with it's own specification. At the same time, it limits the flexibility (perhaps intentionally?) by not allowing complex queries.
**Solution**
It might be worth considering using a standard API implementation instead of our own custom implementation. Standard implementations are more well-known, typically have implementation libraries already available, and are typically provide a higher level of flexability and/or cacheability.
It also would help avoid [[ http://bikeshed.org/ | bikeshedding ]].
[[ https://en.wikipedia.org/wiki/SPARQL | SPARQL ]] ([[ https://www.w3.org/TR/sparql11-overview/ | spec ]]) or [[ http://graphql.org/ | GraphQL ]] ([[ http://facebook.github.io/graphql/October2016/ | spec ]], [[ http://graphql.org/code/ | implementations ]]) are standard specifications that allow complex queries and responses, but are not highly catchable.
[[ http://jsonapi.org/ | JSON API ]] ([[ http://jsonapi.org/format/ | spec ]], [[ http://jsonapi.org/implementations/ | implementations ]]) is a standard specification that does not allow complex queries, but the responses are highly cacheable.
There are probably other specifications available that we ought to consider, but avoiding the custom specification would resolve a lot of issues and make MediaWiki's Web API more approachable to outside developers, and allow existing standard libraries to work seamlessly with our API.