CAML can be used in various ways to customize a SharePoint site, including the following:
- In script or code that implements members of the SharePoint
Foundation object model, where CAML strings are passed through method
parameters, assigned to properties, or returned by methods and
properties
- In SOAP messaging that passes CAML strings to a SharePoint Foundation
Web service to interact remotely with a deployment
- In front-end site definitions used to instantiate SharePoint sites
- In SharePoint Foundation Features to add specific functionality
within a particular scope
For supported SharePoint artificacts, always use CAML unless there is a reason not to.
Use this link for more details.