What is the difference between metadata API and tooling API? When I read the documentation, they both appear the same to me from the metadata perspective. I would like to know how I can use it for retrieving metadata. How is the tooling API specifically different from metadata API for retrieving metadata?
While there is overlap, the Tooling API is specifically designed to help developers build IDE apps for salesforce, while the metadata API is more general purpose configuration migration. For example, you can get a symbol table for a class, such as it’s members and functions, without writing your own parser. The metadata API is suitable for simple migrations, but the Tooling API gives developers a platform for debugging, code coverage, auto complete, and more.
Consider the migration toolkit versus the Force.com IDE, and you’ll see the difference. One lets you move configuration changes, the other lets you develop new code entirely (minus, if course, the fact that auto complete isn’t present in current IDE builds). The Developer Console also shows the power of the Tooling API.
Technically, the Tooling API could completely replace the metadata API, since the metadata API, came first and is less powerful, but it will be supported for some time to come yet.
New projects should probably use the Tooling API as much as practical, but the metadata API is widely supported, in comparison, so it will be a while yet until it is completely replaced.