Ts-Rest: TypeScript Contracts for REST APIs with Built-In Zod Validation

  • The contract-first design and return to REST seem like solid improvements over trpc.

    Lately, I’ve been thinking about what would be the simplest way to typecheck a rest api. I wonder if…

    - …it would make sense to define endpoints in isolation, rather than one big router object. Large / recursive types have bad performance, especially when mixed with zod. Isolated contract definitions would prevent statically checking for path conflicts though.

    - …a composition-based api would be better than a wrapper to minimize the API surface:

        const getPostById = endpoint(/* */)
    
        // client
        const postResponse = fetch(getRequest(getPostById, 123))
        const post = getResponseData(getPostsById, postResponse)