I don't know much about the tools you mentioned and regarding your JSON generation issue I'm not sure I see why the modules you mentionned don't fit the bill, but have you also checked/tried:
?
Assuming you have templates named "post", "movie", "page",... you could have something like:
$wire->addHook("/api/(post|movie|page)/(.*)", function($event) {
$template = $this->templates->get($event->arguments(1));
if(!$template) return;
header("Content-type: application/json");
$fields = $template->fieldgroup->explode("name", ["key" => "name"]);
if($event->arguments(2)) {
$page = $this->pages->findOne("template=$template,name=".$event->arguments(2));
if($page->id) {
return $page->pageQueryJson($fields);
}
}
return $this->pages->find("template=$template")->pageQueryJson($fields);
});
This way you could have pw.domain/api/post returning all posts and then you could query a specific one with pw.domain/api/post/page-name.
(one thing to note is the module does not handle repeaters (or other third parties fields) out of the box, though the docs seem to mention how to do so actually it does but I have an issue in my setup, I think)
In case this doesn't help or I didn't get your issue, would you mind to elaborate ?