In Magento, what's the performance of extending the rest/products api, to retrieve the tags and attributes of the products in the returned list?
api, magento, php, product, rest
Solution
You should extend the existing product REST api model and override the method `_prepareProductForResponse` to include tags and other data
Check here overriding rest model http://web.archive.org/web/20130512072025/http://magepim.com/news/Extending-the-Magento-REST-API-part-1_13
Your model definition:
Namespace_yourmodule_Model_Catalog_Api2_Product_Rest extends Mage_Catalog_Model_Api2_Product_Rest {
protected function _prepareProductForResponse(Mage_Catalog_Model_Product $product)
{
// keep the existing code as it is
// now add new code to add tags
$productData['tags'] = Mage::getModel('tag/tag')->getResourceCollection()
->addPopularity()
->addProductFilter($product->getId());
// in the end
$product->addData($productData);
}
Problem
The only way I can think of doing it is to retrieve the products, and then in the script call the other APIs to retrieve the information I need, before finally returning the response. I'm still somewhat new to Magento, and this seems to be quite heavy on performance. Is the above solution effective in performance, or is there a better way of retrieving the tags,etc.. from the rest/products api? Essentially, what I'm looking for is something along those lines: The current API returns: ``` { 337: { entity_id: "337" type_id: "simple" sku: "ace000" color: "15" gender: "93" material: "130" jewelry_type: null description: "Gunmetal frame with crystal gradient polycarbonate lenses in grey. " meta_keyword: null short_description: "A timeless accessory staple, the unmistakable teardrop lenses of our Aviator sunglasses appeal to everyone from suits to rock stars to citizens of the world." name: "Aviator Sunglasses" meta_title: null meta_description: null regular_price_with_tax: 319.34 regular_price_without_tax: 295 final_price_with_tax: 319.34 final_price_without_tax: 295 is_saleable: true image_url: "http://magentogs.cloudapp.net/magento/media/catalog/product/cache/0/image/9df78eab33525d08d6e5fb8d27136e95/a/c/ace000a_1.jpg" } } ``` I want to add the following (as an example), the ** include the things show the things I want to add. ``` { 337: { entity_id: "337" type_id: "simple" sku: "ace000" color: "15" gender: "93" material: "130" jewelry_type: null description: "Gunmetal frame with crystal gradient polycarbonate lenses in grey. " meta_keyword: null short_description: "A timeless accessory staple, the unmistakable teardrop lenses of our Aviator sunglasses appeal to everyone from suits to rock stars to citizens of the world." name: "Aviator Sunglasses" meta_title: null meta_description: null regular_price_with_tax: 319.34 regular_price_without_tax: 295 final_price_with_tax: 319.34 final_price_without_tax: 295 is_saleable: true image_url: "http://magentogs.cloudapp.net/magento/media/catalog/product/cache/0/image/9df78eab33525d08d6e5fb8d27136e95/a/c/ace000a_1.jpg" **tags: [tag1,tag2,tag3]** **categories: [category1,category2,category3]** } } ```