Description
The recommended way to install Negotiation is through Composer:
Negotiation alternatives and similar libraries
Based on the "API" category.
Alternatively, view Negotiation alternatives based on common mentions on social networks and blogs.
-
API Platform
Create REST and GraphQL APIs, scaffold Jamstack webapps, stream changes in real-time. -
PHP-CRUD-API
Single file PHP script that adds a REST API to a SQL database -
Firebase Admin SDK for PHP
Unofficial Firebase Admin SDK for PHP -
Restler
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and/or RESTful API -
wsdl2phpgenerator
Simple utility and class library for generating php classes from a wsdl file. -
Hateoas
A PHP library to support implementing representations for HATEOAS REST web services. -
OverblogGraphQLBundle
This bundle provides tools to build a complete GraphQL API server in your Symfony App. -
Pinterest Bot for PHP
This PHP library will help you to work with your Pinterest account without using any API account credentials. -
Symfony DataTables Bundle
DataTables bundle for Symfony -
Symfony GraphQl Bundle
Pure PHP implementation of GraphQL Server – Symfony Bundle -
Slack for PHP
A simple PHP package for sending messages to Slack, with a focus on ease of use and elegant syntax. -
Drest
Quickly and easily expose Doctrine entities as REST resource endpoints with the use of simple configuration with annotations, yaml, json or a PHP array. -
chubbyphp-framework
A minimal, highly performant middleware PSR-15 microframework built with as little complexity as possible, aimed primarily at those developers who want to understand all the vendors they use. -
Behapi
Behat extension for those who want to write acceptances tests for apis -
Symfony 2 GraphQl Bundle
GraphQL Bundle for Symfony 2. -
Bearer PHP Client
Bearer client for the PHP programming language -
mite SDK for PHP
Interact with mite from your PHP application. -
phpDoc2pdf
Create PDF formatted documentation for your PHP projects -
yii2-fractal
A set of utils and actions for build API following JSON:Api specification, based on league/fractal -
Personio SDK for PHP
Interact with Personio from your PHP application. -
icanhazstring/expressive-hashids-middleware
PSR-15/PSR-7 compliant middleware using ivanakimov/hashids.php
Static code analysis for 29 languages.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Negotiation or a related project?
README
Negotiation
Negotiation is a standalone library without any dependencies that allows you to implement content negotiation in your application, whatever framework you use. This library is based on RFC 7231. Negotiation is easy to use, and extensively unit tested!
Important: You are browsing the documentation of Negotiation 3.x+.
Documentation for version 1.x is available here: Negotiation 1.x documentation.
Documentation for version 2.x is available here: Negotiation 2.x documentation.
Installation
The recommended way to install Negotiation is through Composer:
$ composer require willdurand/negotiation
Usage Examples
Media Type Negotiation
$negotiator = new \Negotiation\Negotiator();
$acceptHeader = 'text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8';
$priorities = array('text/html; charset=UTF-8', 'application/json', 'application/xml;q=0.5');
$mediaType = $negotiator->getBest($acceptHeader, $priorities);
$value = $mediaType->getValue();
// $value == 'text/html; charset=UTF-8'
The Negotiator
returns an instance of Accept
, or null
if negotiating the
best media type has failed.
Language Negotiation
<?php
$negotiator = new \Negotiation\LanguageNegotiator();
$acceptLanguageHeader = 'en; q=0.1, fr; q=0.4, fu; q=0.9, de; q=0.2';
$priorities = array('de', 'fu', 'en');
$bestLanguage = $negotiator->getBest($acceptLanguageHeader, $priorities);
$type = $bestLanguage->getType();
// $type == 'fu';
$quality = $bestLanguage->getQuality();
// $quality == 0.9
The LanguageNegotiator
returns an instance of AcceptLanguage
.
Encoding Negotiation
<?php
$negotiator = new \Negotiation\EncodingNegotiator();
$encoding = $negotiator->getBest($acceptHeader, $priorities);
The EncodingNegotiator
returns an instance of AcceptEncoding
.
Charset Negotiation
<?php
$negotiator = new \Negotiation\CharsetNegotiator();
$acceptCharsetHeader = 'ISO-8859-1, UTF-8; q=0.9';
$priorities = array('iso-8859-1;q=0.3', 'utf-8;q=0.9', 'utf-16;q=1.0');
$bestCharset = $negotiator->getBest($acceptCharsetHeader, $priorities);
$type = $bestCharset->getType();
// $type == 'utf-8';
$quality = $bestCharset->getQuality();
// $quality == 0.81
The CharsetNegotiator
returns an instance of AcceptCharset
.
Accept*
Classes
Accept
and Accept*
classes share common methods such as:
getValue()
returns the accept value (e.g.text/html; z=y; a=b; c=d
)getNormalizedValue()
returns the value with parameters sorted (e.g.text/html; a=b; c=d; z=y
)getQuality()
returns the quality if available (q
parameter)getType()
returns the accept type (e.g.text/html
)getParameters()
returns the set of parameters (excluding theq
parameter if provided)getParameter()
allows to retrieve a given parameter by its name. Fallback to a$default
(nullable) value otherwise.hasParameter()
indicates whether a parameter exists.
Versioning
Negotiation follows Semantic Versioning.
End Of Life
1.x
As of October 2016, branch
1.x
is not supported
anymore, meaning major version 1
reached end of life. Last version is:
1.5.0.
2.x
As of November 2020, branch
2.x
is not supported
anymore, meaning major version 2
reached end of life. Last version is:
2.3.1.
Stable Version
3.x (and dev-master
)
Negotiation 3.0
has been released on November 26th, 2020. This is the current stable version
and it is in sync with the main branch (a.k.a. master
).
Unit Tests
Setup the test suite using Composer:
$ composer install --dev
Run it using PHPUnit:
$ phpunit
Contributing
See [CONTRIBUTING](CONTRIBUTING.md) file.
Credits
Some parts of this library are inspired by:
- Symfony framework;
- FOSRest;
- PEAR HTTP2.
William Durand [email protected]
License
Negotiation is released under the MIT License. See the bundled LICENSE file for details.
*Note that all licence references and agreements mentioned in the Negotiation README section above
are relevant to that project's source code only.