I would like to know what you think the best approach is for retrieving product data from an external source in Magento 2

I have tried two options and both work but I would like to know what you think is the best method:

**Method 1 - Custom Endpoint**

Using a controller I can make a GET request to:
http://domain.com/modulename/product/index And pass the SKU as a Param in the request from an external source

Then my controller will call my helper class and return a JSON array of product data:

 public function execute()
 {
 /**
 * We would normally create some basic Auth check before instatiating the getProduct() method
 * The Auth token would be stored in the admin config of the module using system.xml
 */
 return $this->resultJsonFactory->create()->setData($this->helper->getProduct());
 }

And my Helper

 public function getProduct()
 {
 // This is just for the test I am going to load a configurable product then get the child products
 // Normally the loop would check but this is only for the test.
 $product = $this->products->get('MH01');
 // This is the parent product name and concatenated the SKU
 $productData['name'] = $product->getName() . ' ' . $product->getSku();
 // Get the child products
 $childIds = $this->configurable->getChildrenIds($product->getId());
 $childData = [];
 foreach ($childIds[0] as $childId) {
 $simple = $this->products->getById($childId);
 $childData[] = [
 'name' => $simple->getName(),
 'sku' => $simple->getSku()
 ];
 }
 return ['parent' => $productData, 'children' => $childData];
 }

The other approach would be to use the Magento REST API Webservice method

**Method 2 - REST API**

I set the route via webapi.xml then make a GET request to:
http://domain.com/rest/V1/module-name/products/{$id} 

 <?xml version="1.0" ?>
 <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
 	<route method="GET" url="/V1/costa-test/products/:id">
 		<service class="Costa\Test\Api\ProductsManagementInterface" method="getProducts"/>
 		<resources>
 			<resource ref="anonymous"/>
 		</resources>
 	</route>
 </routes>

The ProductsManagementInterface Class will take the $id and pass it

 interface ProductsManagementInterface
 {
 /**
 * GET for products api
 * @param string $id
 * @return string
 */
 public function getProducts($id);
 }

Then in my ProductsManagement Class

 public function getProducts($id)
 {
 // This is just for the test I am going to load a configurable product then get the child products
 // Normally the loop would check but this is only for the test.
 $product = $this->products->getById($id);
 // This is the parent product name and concatenated the SKU
 $productData['name'] = $product->getName() . ' ' . $product->getSku();
 // Get the child products
 $childIds = $this->configurable->getChildrenIds($product->getId());
 $childData = [];
 /** @var $childIds array */
 foreach ($childIds[0] as $childId) {
 $simple = $this->products->getById($childId);
 $childData[] = [
 'name' => $simple->getName(),
 'sku' => $simple->getSku(),
 ];
 }
 return ['parent' => $productData, 'children' => $childData];
 }

Both approaches work well but what would you say is the best method?