Skip to content

[Feature Request] Automatic REST API: Support for Nested Resource Endpoints (Hierarchical Routing) #2374

@lsmith77

Description

@lsmith77

Description

Is your feature request related to a problem? Please describe.
Currently, ZenStack's automatic REST API generates "flat" endpoints for all models (e.g., /thread/1 and /comment/2). While functional, this doesn't reflect the logical ownership and hierarchy of data. For resources that are strictly dependent on a parent—such as a Comment that must always belong to a Thread—a flat structure lacks semantic clarity and forces the client to manually manage foreign keys in every request.

Without nested routing, the API doesn't express the constraint that a child resource's lifecycle is bound to its parent.

Describe the solution you'd like
I would like the ability to configure hierarchical or "nested" endpoints within the automatic REST API. This would allow for URLs like:
GET /threads/:threadId/comments/:commentId

Key Requirements:

  • Logical Scoping: Accessing a child via a nested route should automatically apply a filter to ensure the child actually belongs to the specified parent.
  • Simplified Creation: A POST to /threads/1/comments should automatically associate the new comment with threadId: 1 without requiring the ID in the request body.
  • ZModel Configuration: Ideally, this could be defined in the .zmodel file using an attribute (e.g., @@http.path) or via the plugin configuration to specify parent-child relationships for routing.

Example Structure:
If a Thread has many Comments:

  • GET /threads/1/comments — Fetches all comments for thread 1.
  • POST /threads/1/comments — Creates a comment specifically for thread 1.
  • GET /threads/1/comments/2 — Fetches comment 2, but only if it belongs to thread 1 (returning 404 otherwise).

Describe alternatives you've considered

  • Flat Endpoints with Filters: Using GET /comment?threadId=1. While this works, it is less RESTful and doesn't enforce the hierarchy at the routing level.
  • Custom Hooks/Routes: Writing manual Next.js or Express routes to wrap the ZenStack logic. This defeats the purpose of an "Automatic" REST API and increases boilerplate.

Additional context
Hierarchical routing is a staple of mature REST frameworks. For instance:

  • Ruby on Rails allows resources :threads do resources :comments end.
  • NestJS and Express developers frequently implement this to improve API discoverability and security through implicit scoping.

This feature would make ZenStack-generated APIs feel significantly more professional and "opinionated" in a way that aligns with standard REST best practices.

References:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions