# Protocol::HTTP

Provides abstractions for working with the HTTP protocol.

[![Development
Status](https://github.com/socketry/protocol-http/workflows/Test/badge.svg)](https://github.com/socketry/protocol-http/actions?workflow=Test)

## Features

  - General abstractions for HTTP requests and responses.
  - Symmetrical interfaces for client and server.
  - Light-weight middlewar model for building applications.

## Usage

Please see the [project documentation](https://github.com/socketry/protocol-http) for more details.

  - [Getting Started](https://github.com/socketry/protocol-httpguides/getting-started/index) - This guide explains how
    to use `protocol-http` for building abstract HTTP interfaces.

  - [Design Overview](https://github.com/socketry/protocol-httpguides/design-overview/index) - The interfaces provided
    by <code class="language-ruby">Protocol::HTTP</code> underpin all downstream implementations. Therefore, we provide
    some justification for the design choices.

## Contributing

We welcome contributions to this project.

1.  Fork it.
2.  Create your feature branch (`git checkout -b my-new-feature`).
3.  Commit your changes (`git commit -am 'Add some feature'`).
4.  Push to the branch (`git push origin my-new-feature`).
5.  Create new Pull Request.

## See Also

  - [protocol-http1](https://github.com/socketry/protocol-http1) — HTTP/1 client/server implementation using this
    interface.
  - [protocol-http2](https://github.com/socketry/protocol-http2) — HTTP/2 client/server implementation using this
    interface.
  - [async-http](https://github.com/socketry/async-http) — Asynchronous HTTP client and server, supporting multiple HTTP
    protocols & TLS.
  - [async-websocket](https://github.com/socketry/async-websocket) — Asynchronous client and server WebSockets.
