Skip to main content

Crate api_bones

Crate api_bones 

Source
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 enabledAvailable types
(none)Pure-core types: ErrorCode, HealthStatus, PaginationParams, SortDirection
allocAll 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)

FeatureWhat 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 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-Control header 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
CorrelationId newtype 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
ETag and conditional request types (RFC 7232).
header_id
Shared HeaderId trait for newtype wrappers that are transported via a dedicated HTTP header.
health
RFC 8458 health check response types.
idempotency
IdempotencyKey newtype for safe retry of non-idempotent HTTP methods.
links
HATEOAS Link and Links types for hypermedia-driven API responses.
method
HTTP method types.
openapi
OpenAPI schema helpers: Example wrapper and DeprecatedField marker.
org_context
Cross-cutting platform context bundle.
org_id
Tenant identifier newtype, transported via the X-Org-Id HTTP header.
pagination
Pagination types for list endpoints.
query
Query parameter types for list endpoints.
range
Range request and Content-Range response header types (RFC 7233).
ratelimit
Rate limit metadata types.
request_id
Standalone RequestId newtype for tracing HTTP requests end-to-end.
response
Generic API response envelope types.
retry
Retry primitives: policy, backoff strategies, Retry-After parsing, and the Idempotent marker trait.
serde
Serde helper modules for common API wire-format patterns.
slug
Validated Slug newtype for URL-friendly identifiers.
status
Full HTTP status code type covering 1xx/2xx/3xx/4xx/5xx.
traceparent
W3C Trace Context types: TraceId, SpanId, and TraceContext.
url
Fluent URL and query-string builders.
vary
Vary response header helper.
version
API versioning types.