Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/elementaryframework/waterpipe

URL routing framework, requests/responses handler, and HTTP client for PHP
https://github.com/elementaryframework/waterpipe

composer http http-client php php7 request response responses-handler url-rewrite url-router

Last synced: 2 days ago
JSON representation

URL routing framework, requests/responses handler, and HTTP client for PHP

Awesome Lists containing this project

README

        

![WaterPipe Logo](assets/banner.png)

# WaterPipe

[![downloads](https://img.shields.io/packagist/dt/elementaryframework/water-pipe?style=for-the-badge&logo=packagist)](https://packagist.org/packages/elementaryframework/water-pipe)
[![downloads](https://img.shields.io/packagist/v/elementaryframework/water-pipe?style=for-the-badge&logo=packagist)](https://packagist.org/packages/elementaryframework/water-pipe)
[![downloads](https://img.shields.io/github/repo-size/ElementaryFramework/WaterPipe?style=for-the-badge&logo=github)](https://github.com/ElementaryFramework/WaterPipe)
[![downloads](https://img.shields.io/github/license/ElementaryFramework/WaterPipe?style=for-the-badge&logo=github)](https://github.com/ElementaryFramework/WaterPipe/blob/master/LICENSE)

A powerful routing framework and requests/responses handler for PHP

WaterPipe is a library which allows you to easily handle HTTP requests and responses with PHP, giving you all the power
to build a fully RESTful API, to create a routing framework for your web application, etc...

## Example

```php
get("/", function (Request $req, Response $res) {
$res->sendHtml("Welcome to my web app ! Click here to login");
});

// Add a new route to the pipe with HTTP GET method (the login page)
$root->get("/login", function (Request $req, Response $res) {
$res->sendFile("./pages/login.html", ResponseStatus::OkCode);
});

// Add a new route to the pipe with HTTP POST method (the login page form validation)
$root->post("/login", function (Request $req, Response $res) {
// Get $_POST values
$body = $req->getBody();
$username = $body["username"];
$password = $body["password"];

if (validate_username($username) && validate_password($password)) {
// Checks if the client access this route with an AJAX request
if ($req->isAjax()) {
$res->sendJson(array(
"success" => true
));
} else {
// Redirect the user to the members page
$res->redirect("/members/{$username}");
}
} else {
// Checks if the client access this route with an AJAX request
if ($req->isAjax()) {
$res->sendJson(array(
"success" => false
));
} else {
// Redirect the user to the members page
$res->redirect("/login");
}
}
});

// Add a new route to the pipe with HTTP GET method (the member's dashboard page)
$root->get("/members/:username", function (Request $req, Response $res) {
$res->sendHtml("Welcome to your dashboard {$req->uri['username']} !");
});

// Add a new HTTP error handler (the 404 Not Found Error)
$root->error(ResponseStatus::NotFoundCode, function (Request $req, Response $res) {
$res->sendText("404 Error: Not Found.", ResponseStatus::NotFoundCode);
});

// Finally... Run the pipe
$root->run();
```

## Features

- Highly designed to quickly create routes for MVC applications and REST services ;
- Object Oriented HTTP [requests](https://github.com/ElementaryFramework/WaterPipe/blob/master/src/WaterPipe/HTTP/Request/Request.php) and [responses](https://github.com/ElementaryFramework/WaterPipe/blob/master/src/WaterPipe/HTTP/Response/Response.php) management ;
- Full support for HTTP methods: GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS ;
- Easily handle common HTTP errors (404, 500) ;
- Designed to work with frontend frameworks like React.js, AngularJS, Vue.js, etc... with AJAX support

## Installation

You can install **WaterPipe** in your project with [composer](http://getcomposer.org):

```sh
composer require elementaryframework/water-pipe
```

Once installed, you can access the **WaterPipe** api through the `ElementaryFramework\WaterPipe` namespace.

## How to use ?

New to **WaterPipe** ? Learn how to build routing frameworks and REST services by browsing our [wiki](https://github.com/ElementaryFramework/WaterPipe/wiki).

### Additional resources and tutorials

- [How to create a RESTful API with PHP and the Elementary Framework](https://dev.to/na2axl/how-to-create-a-restful-api-with-php-and-the-elementary-framework-30ij) written by @na2axl on dev.to

## Donate

Liking Elementary Framework? Help us continue to maintain it and provide you better support and awesome functionalities with a small donation!

[![Donate PayPal Button](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AGAQAC3W4ZRMA&source=url)

## License

© Copyright 2018-2020 Aliens Group.

Licensed under MIT ([read license](https://github.com/ElementaryFramework/WaterPipe/blob/master/LICENSE))