When I was downloading Partner WSDL today I realized that there option to download APEX WSDL.
When i brush through the code it seems like most of operation this WSDL offer are already there on Tooling WSDL then why they have created Apex WSDL?
it seems like most of operation this WSDL offer are already there on Tooling WSDL then why they have created Apex WSDL?
It is actually the other way round.
Partner/Apex SOAP API predates Tooling API.
For example in API v20 (APEX WSDL) had command
executeAnonymous, while Tooling API simply did not exist at that time.
Tooling API has been gradually catching up to Apex API (not to be confused with Apex Code APIs) and these days there is probably not many reasons to use Apex WSDL other than for compatibility with applications created few years ago - that is if one wants to upgrade legacy application to most recent API version, but does not want to do a full re-implementation/switch from APEX WSDL to Tooling WSDL.
There are still some differences between these two APIs though - for example how you set debug levels. In Apex API (APEX WSDL) it is as simple as setting debug header before sending a call, while with Tooling API (Tooling WSDL) it is much more involved/granular.
Extending on @gaiser's answer, I'd go so far as to say the Tooling API has surpassed the Apex API in terms of functionality. In addition to the difference in how the logging levels are defined, there is also a difference in how Apex logs are handled in executeAnonymous. See Difference between Tooling API and Apex API logging.
The Apex API has only had perfunctory updates since the Tooling API became available. All new features are going in the Tooling API. E.g. Executing single test methods.
Comparing the API documentation can also be useful. Tooling API Documentation vs. Apex API Documentation. Notice how the Tooling API provides a wider range of methods. Also, the Tooling API has a style that is more inline with the Partner API. E.g. create/delete/query/update/upsert and describe* calls.
So, unless you specifically need one the the Apex APIs differences in handling logging, I'd say ignore it and use the Tooling API. You might also want to check the REST version of the Tooling API. It has some resources that don't have an equivalent in the SOAP version. E.g. the