A feature-rich HTTP and REST client for the Crystal programming language, inspired by Ruby's RestClient.
Crest is an HTTP and REST client library for the Crystal programming language. It provides a comprehensive set of tools for making web requests, handling everything from simple GET calls to complex operations like multipart uploads, authentication, and streaming. It solves the problem of Crystal's standard library lacking a full-featured HTTP client by offering an intuitive, RestClient-inspired interface.
Crystal developers who need to interact with HTTP APIs, web services, or perform web scraping and require a robust client with advanced features like authentication, proxy support, and flexible payload handling.
Developers choose Crest for its rich feature set, clean API inspired by Ruby's RestClient, and its focus on filling the gaps in Crystal's standard HTTP capabilities. It reduces boilerplate and handles complex HTTP scenarios out-of-the-box.
HTTP and REST client for Crystal
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports all major HTTP methods, authentication (Basic/Digest), multipart uploads, and streaming, filling gaps in Crystal's standard library as detailed in the README.
Inspired by Ruby's RestClient, with clean syntax for requests and resources, making it easy for developers familiar with that style.
Includes built-in logging with regex filtering and a to_curl method to convert requests to cURL commands, simplifying troubleshooting.
Offers multiple parameter serializers (Flat, Nested, Enumerated) for query strings and form data, adapting to various API requirements.
Adds a shard dependency that could become redundant if Crystal's standard library incorporates similar features, as noted by the author's hope for obsolescence.
Configuration with numerous optional parameters can be overwhelming for basic HTTP requests, where Crystal's HTTP::Client might suffice.
Built on Crystal's HTTP::Client, which primarily handles HTTP/1.1; advanced protocols like HTTP/2 or WebSockets aren't explicitly supported out-of-the-box.
Provides multiple error-handling methods (exceptions vs. manual checks), which can lead to inconsistent code if not carefully standardized.