HttpApi.ts
HttpApi.ts overview
Section titled “HttpApi.ts overview”Describes an Effect HTTP API as groups of endpoints.
An HttpApi value is data: it has an identifier, annotations, and groups of
endpoints that describe request inputs, responses, middleware, and route
metadata. The same description can be used by server builders, generated
clients, URL builders, OpenAPI generation, and reflection tools.
Since v4.0.0
Exports Grouped by Category
Section titled “Exports Grouped by Category”constructors
Section titled “constructors”Creates an empty HttpApi with the supplied identifier.
When to use
Use when you need to start defining an HTTP API, add groups with add or
addHttpApi, provide endpoint implementations with HttpApiBuilder.group,
and register the API with HttpApiBuilder.layer.
Signature
declare const make: <const Id extends string>(identifier: Id) => HttpApi<Id, never>Since v4.0.0
guards
Section titled “guards”isHttpApi
Section titled “isHttpApi”Returns true when a value is an HttpApi.
Signature
declare const isHttpApi: (u: unknown) => u is AnySince v4.0.0
models
Section titled “models”Any (interface)
Section titled “Any (interface)”An HttpApi value with its identifier and group types erased.
Signature
export interface Any { readonly [TypeId]: typeof TypeId}Since v4.0.0
AnyWithProps (type alias)
Section titled “AnyWithProps (type alias)”An HttpApi with broad identifier and group types while retaining the concrete
runtime properties used by implementation helpers.
Signature
type AnyWithProps = HttpApi<string, HttpApiGroup.AnyWithProps>Since v4.0.0
HttpApi (interface)
Section titled “HttpApi (interface)”An HttpApi is a collection of HTTP API groups and endpoints that represents a
portion of your domain.
When to use
Use when endpoint implementations can be provided with HttpApiBuilder.group, and the
completed API can be registered with HttpApiBuilder.layer.
Signature
export interface HttpApi<out Id extends string, out Groups extends HttpApiGroup.Any = never> extends Pipeable { new (_: never): {} readonly [TypeId]: typeof TypeId readonly identifier: Id readonly groups: Record.ReadonlyRecord<string, Groups> readonly annotations: Context.Context<never>
/** * Add a `HttpApiGroup` to the `HttpApi`. */ add<const A extends NonEmptyReadonlyArray<HttpApiGroup.Any>>(...groups: A): HttpApi<Id, Groups | A[number]>
/** * Add another `HttpApi` to the `HttpApi`. */ addHttpApi<Id2 extends string, Groups2 extends HttpApiGroup.Any>( api: HttpApi<Id2, Groups2> ): HttpApi<Id, Groups | Groups2>
/** * Prefix all endpoints in the `HttpApi`. */ prefix<const Prefix extends PathInput>(prefix: Prefix): HttpApi<Id, HttpApiGroup.AddPrefix<Groups, Prefix>>
/** * Adds a middleware to every endpoint currently in the `HttpApi`. * * **Gotchas** * * Endpoints added after this method is called do not receive the middleware. */ middleware<I extends HttpApiMiddleware.AnyId, S>( middleware: Context.Key<I, S> ): HttpApi<Id, HttpApiGroup.AddMiddleware<Groups, I>>
/** * Annotate the `HttpApi`. */ annotate<I, S>(tag: Context.Key<I, S>, value: S): HttpApi<Id, Groups>
/** * Annotate the `HttpApi` with a Context. */ annotateMerge<I>(context: Context.Context<I>): HttpApi<Id, Groups>}Since v4.0.0
reflection
Section titled “reflection”reflect
Section titled “reflect”Describes the groups and endpoints in an HttpApi.
Details
The callbacks receive each group or endpoint with merged annotations, endpoint middleware, and response schemas grouped by HTTP status.
Signature
declare const reflect: <Id extends string, Groups extends HttpApiGroup.Any>( self: HttpApi<Id, Groups>, options: { readonly predicate?: | Predicate.Predicate<{ readonly endpoint: HttpApiEndpoint.AnyWithProps readonly group: HttpApiGroup.AnyWithProps }> | undefined readonly onGroup: (options: { readonly group: HttpApiGroup.AnyWithProps readonly mergedAnnotations: Context.Context<never> }) => void readonly onEndpoint: (options: { readonly group: HttpApiGroup.AnyWithProps readonly endpoint: HttpApiEndpoint.AnyWithProps readonly mergedAnnotations: Context.Context<never> readonly middleware: ReadonlySet<HttpApiMiddleware.AnyService> readonly successes: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]> readonly errors: ReadonlyMap<number, readonly [Schema.Top, ...Array<Schema.Top>]> }) => void }) => voidSince v4.0.0
services
Section titled “services”AdditionalSchemas (class)
Section titled “AdditionalSchemas (class)”Adds additional schemas to components/schemas.
The provided schemas must have a identifier annotation.
Signature
declare class AdditionalSchemasSince v4.0.0