in this article, I'll show you how to create custom controller with JSON response in Drupal 8.
add to your module these files like this:
create mymodule.routing.yml
codimth.json_api_articles:
path: '/api/articles'
defaults:
_controller: 'Drupal\mymodule\Controller\JsonApiArticlesController::index'
_title: 'Codimth JSON api'
methods: [GET]
requirements:
_access: 'TRUE'
create src/Controller/JsonApiArticlesController.php
getData(): will return article nodes from database.
<?php
namespace Drupal\mymodule\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* Class JsonApiArticlesController
* @package Drupal\mymodule\Controller
*/
class JsonApiArticlesController {
/**
* @return JsonResponse
*/
public function index() {
return new JsonResponse([ 'data' => $this->getData(), 'method' => 'GET', 'status'=> 200]);
}
/**
* @return array
*/
public function getData() {
$result=[];
$query = \Drupal::entityQuery('node')
->condition('type', 'article')
->sort('title', 'DESC');
$nodes_ids = $query->execute();
if ($nodes_ids) {
foreach ($nodes_ids as $node_id) {
$node = \Drupal\node\Entity\Node::load($node_id);
$result[] = [
"id" => $node->id(),
"title" => $node->getTitle(),
];
}
}
return $result;
}
}
/api/articles will return result like this: