Приведу небольшой пример самой примитивной реализации.
Роутинг:
Route::set('default', '/<controller>/<action>');
Контроллер:
class Controller_User extends Controller {
public function action_get_by_id()
{
$user_id = $this->request->post('user_id');
$user = DB::select()->from('users')->where('id','=',$user_id)->execute();
$this->response->body(json_encode($user));
}
}
Мы банально отдали json строку ответом на POST запрос на адрес: site.ru/user/get_by_id. В POST запросе мы отправили переменную user_id, которую обработали и приняли в нужном экшене. Этот код не является эталоном, но принцип думаю ясен. От вас требуется написать базовый контроллер для всех апишных контроллеров и учесть в нем обработку заголовков, унифицировать ответы на запросы и пр.
В качестве примера посмотрите на этот модуль:
https://github.com/samkeen/kohana-simple-REST . Он довольно простой и с моей точки зрения удобный, хотя работу с БД в нем я бы убрал.