Expand description
§api-bones
Opinionated REST API types: errors (RFC 9457), pagination, health checks, and more.
§no_std support
This crate is #![no_std] when the default std feature is disabled.
| Features enabled | Available types |
|---|---|
| (none) | Pure-core types: ErrorCode, HealthStatus, PaginationParams, SortDirection |
alloc | All types that use String/Vec/Arc |
std (default) | Full feature set including HashMap-backed types |
# no_std + alloc (WASM, embedded with allocator)
api-bones = { version = "...", default-features = false, features = ["alloc"] }
# pure no_std (core types only)
api-bones = { version = "...", default-features = false }§Core type: ApiError
Every service serializes errors into RFC 9457 Problem Details format:
{
"type": "urn:api-bones:error:resource-not-found",
"title": "Resource Not Found",
"status": 404,
"detail": "Booking 123 not found"
}use api_bones::{ApiError, ErrorCode};
fn find_booking(id: u64) -> Result<(), ApiError> {
Err(ApiError::not_found(format!("booking {id} not found")))
}§Feature flags (selection)
| Feature | What it enables |
|---|---|
schemars | [schemars::JsonSchema] derive on all public types |
utoipa | [utoipa::ToSchema] derive on all public types |
Enable schemars in your Cargo.toml:
api-bones = { version = "3", features = ["schemars"] }§Add as dependency
[dependencies]
api-bones = "3"Re-exports§
pub use audit::AuditInfo;pub use audit::Principal;pub use audit::PrincipalId;pub use audit::PrincipalKind;pub use audit::PrincipalParseError;pub use audit::ResolvedPrincipal;pub use bulk::BulkItemResult;pub use bulk::BulkRequest;pub use bulk::BulkResponse;pub use common::ResourceId;pub use common::new_resource_id;pub use common::parse_timestamp;pub use cache::CacheControl;pub use common::Timestamp;pub use content_type::ContentType;pub use correlation_id::CorrelationId;pub use correlation_id::CorrelationIdError;pub use cors::CorsHeaders;pub use cors::CorsOrigin;pub use deprecated::Deprecated;pub use error::ErrorCode;pub use error::ErrorTypeMode;pub use error::HttpError;pub use error::ProblemJson;pub use error::ApiError;pub use error::ValidationError;pub use error::error_type_mode;pub use error::set_error_type_mode;pub use error::urn_namespace;pub use etag::ETag;pub use etag::IfMatch;pub use etag::IfNoneMatch;pub use header_id::HeaderId;pub use health::HealthStatus;pub use health::ReadinessResponse;pub use health::HealthCheck;pub use health::LivenessResponse;pub use idempotency::IdempotencyKey;pub use idempotency::IdempotencyKeyError;pub use links::Link;pub use links::Links;pub use method::HttpMethod;pub use org_context::Attestation;pub use org_context::AttestationKind;pub use org_context::OrganizationContext;pub use org_context::Role;pub use org_context::RoleBinding;pub use org_context::RoleScope;pub use org_id::OrgId;pub use org_id::OrgIdError;pub use org_id::OrgPath;pub use pagination::PaginationParams;pub use pagination::CursorPaginatedResponse;pub use pagination::CursorPagination;pub use pagination::CursorPaginationParams;pub use pagination::PaginatedResponse;pub use pagination::KeysetPaginatedResponse;pub use pagination::KeysetPaginationParams;pub use query::SortDirection;pub use query::FilterEntry;pub use query::FilterParams;pub use query::SearchParams;pub use query::SortParams;pub use range::ByteRange;pub use range::ContentRange;pub use range::ParseRangeError;pub use range::RangeHeader;pub use ratelimit::RateLimitInfo;pub use request_id::RequestId;pub use request_id::RequestIdError;pub use request_id::RequestIdParseError;pub use response::ApiResponse;pub use response::ApiResponseBuilder;pub use response::ResponseMeta;pub use retry::BackoffStrategy;pub use retry::Idempotent;pub use retry::RetryPolicy;pub use retry::RetryAfter;pub use retry::RetryAfterParseError;pub use slug::Slug;pub use slug::SlugError;pub use status::StatusCode;pub use traceparent::SamplingFlags;pub use traceparent::SpanId;pub use traceparent::TraceContext;pub use traceparent::TraceContextError;pub use traceparent::TraceId;pub use url::QueryBuilder;pub use url::UrlBuilder;pub use vary::Vary;pub use version::ApiVersion;pub use version::ApiVersionParseError;pub use version::SemverTriple;
Modules§
- audit
- Audit metadata for API resources.
- bulk
- Bulk operation envelope types for batch API endpoints.
- cache
Cache-Controlheader builder and parser (RFC 7234).- common
- Common RFC-conformant primitive types used across all external APIs.
- content_
type - Media type / Content-Type representation.
- correlation_
id CorrelationIdnewtype for cross-service request correlation.- cors
- Typed helpers for CORS response headers (
Access-Control-*). - deprecated
- Deprecation marker type (RFC 8594).
- error
- Standard API error types for all api-bones services.
- etag
ETagand conditional request types (RFC 7232).- header_
id - Shared
HeaderIdtrait for newtype wrappers that are transported via a dedicated HTTP header. - health
- RFC 8458 health check response types.
- idempotency
IdempotencyKeynewtype for safe retry of non-idempotent HTTP methods.- links
- HATEOAS
LinkandLinkstypes for hypermedia-driven API responses. - method
- HTTP method types.
- openapi
OpenAPIschema helpers:Examplewrapper andDeprecatedFieldmarker.- org_
context - Cross-cutting platform context bundle.
- org_id
- Tenant identifier newtype, transported via the
X-Org-IdHTTP header. - pagination
- Pagination types for list endpoints.
- query
- Query parameter types for list endpoints.
- range
Rangerequest andContent-Rangeresponse header types (RFC 7233).- ratelimit
- Rate limit metadata types.
- request_
id - Standalone
RequestIdnewtype for tracing HTTP requests end-to-end. - response
- Generic API response envelope types.
- retry
- Retry primitives: policy, backoff strategies,
Retry-Afterparsing, and theIdempotentmarker trait. - serde
- Serde helper modules for common API wire-format patterns.
- slug
- Validated
Slugnewtype for URL-friendly identifiers. - status
- Full HTTP status code type covering 1xx/2xx/3xx/4xx/5xx.
- traceparent
- W3C Trace Context types:
TraceId,SpanId, andTraceContext. - url
- Fluent URL and query-string builders.
- vary
Varyresponse header helper.- version
- API versioning types.