The shift towards API driven design has echoed in new design patterns from traditional MVC. Middleware pipelines is geared to address the complexities and nuances that arise with APIs. We'll delve into Expressive, discuss strategies for adding layers, handling authentication and authorization, and implications for projects. Come learn all about middleware and discover how you can leverage pipelines in your development.
3. Objective
• Know how to leverage middleware in your projects
• Familiar with middleware use cases
4. Overview
• What Is Middleware
• Use Cases
• PSR Implementations
• APIs and Middleware
• Automated Testing Considerations
• What Middleware Can Replace
8. What Is Middleware
• Inbound request
• Layers of middleware logic
• Ends up in application
• Returns response
9. What Is Middleware
• Connected layers are a processing pipeline
• Request flows through the pipeline
• Output of layer is input to next layer
10. What Is Middleware
• Middleware layer
interface MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface;
}
11. What Is Middleware
class ApiKeyCheck implements MiddlewareInterface
{
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface {
// check for API key
return $handler->handle($request);
}
}
12. What Is Middleware
• Application layer
interface RequestHandlerInterface
{
public function handle(
ServerRequestInterface $request
): ResponseInterface;
}
13. What Is Middleware
class SendEmail implements RequestHandlerInterface
{
public function handle(
ServerRequestInterface $request
): ResponseInterface {
// send an email
return new JsonResponse(
['recipient' => 'abc@example.com']
);
}
}
14. What Is Middleware
• Configuring routes - Laminas, Zend
$app->post(
'/api/change',
[
AppApiChangeGeneratorChangeGeneratorFilter::class,
AppApiChangeGeneratorChangeGeneratorAction::class,
],
'api-change'
);
34. PSR Implementations
• PSR-15
- HTTP Server Request Handlers
public function handle(
ServerRequestInterface $request
): ResponseInterface;
- Middleware processes a request
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface;
46. Automated Testing Considerations
• Functional tests
- Test individual middleware layers
- Test application processing
- Test responses being returned from code
55. Review
• What Is Middleware
• Use Cases
• PSR Implementations
• APIs and Middleware
• Automated Testing Considerations
• What Can Middleware Replace?
57. Mark Niebergall @mbniebergall
• PHP since 2005
• Masters degree in MIS
• Senior Software Engineer
• Drug screening project
• Utah PHP Co-Organizer
• CSSLP, SSCP Certified and SME
• Father, long distance running, fishing, skiing