• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Validation for APIs in Laravel 4
 

Validation for APIs in Laravel 4

on

  • 332 views

In my first talk, I raise the concerns I have with current validation practises and what we can do to make it better.

In my first talk, I raise the concerns I have with current validation practises and what we can do to make it better.

Statistics

Views

Total Views
332
Views on SlideShare
291
Embed Views
41

Actions

Likes
1
Downloads
5
Comments
0

2 Embeds 41

http://www.slideee.com 24
https://twitter.com 17

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Validation for APIs in Laravel 4 Validation for APIs in Laravel 4 Presentation Transcript

    • Validation for APIs Good validation practises. API focused. Kirk Bushell
    • Who the hell am I? • Technical Lead for Tectonic Digital (www.tectonic.com.au) • Software architect for http://awardforce.com • Technical writer (see: http://kirkbushell.me) • Open source contributor (Laravel 3/4, various other projects) • http://github.com/kirkbushell • Also known as Oddman on IRC, forums.etc. • @kirkbushell
    • Disclaimers
    • This is my first talk.
    • Sorry.
    • In addition... • I'll assume you know a couple of things about validation and • You know or at least understand some of the concepts of Laravel 4, including: • Dependency injection and • The IoC feature • I start work at 4.30am (apologies if I'm not quite with it)
    • Why? • There's been a lot of talk in the community the last 6 months about validation • How we can do it well - lots of different opinions • I have a pretty strong opinion on this matter
    • What we're going to cover • A brief history of MVC, the repository pattern and why validation should be its own domain • Implementing validation within an API context • Using exceptions for greater readability • Catching exceptions to generate API responses automagically • The end result - cleaner code
    • What I'm not going to talk about • RESTful APIs • The view layer
    • A brief history of everything MVC. • A blessing to web development (and software development in general) • Fat controllers, skinny models • Skinny controllers, fat models • Validation tied up in models (along with everything else) • We still seem to be stuck on the previous point.
    • Introducing.. the repository pattern? • Helped clean up models • Query building and object management • So, what about validation?
    • Validate all the things! • Validation within models breaks the single responsibility principle • Validation in models doesn't make much sense if you're using the repository pattern • Implemented via the controller or a service (such as a user registration service)
    • Implementing validation
    • The validate method Please read Jason Lewis' article: http://jasonlewis.me/article/laravel- advanced-validation // Validate function from article protected function validate() { $this->validator = Validator::make($this->input, $this->rules); if ($this->validator->fails()) { throw new ValidateException($this->validator); } }
    • ValidateException class ValidateException extends Exception { protected $validator; public function __construct(Validator $validator) { $this->message = 'Validation has failed, or something.'; $this->validator = $validator; } public function getErrors() { return $this->validator->messages(); } }
    • Our code, our rules Implement our own custom rules for user registration: // UserValidator class class UserValidator extends Validator { public function register() { $this->rules = [ 'email' => ['required', 'email'], 'password' => ['required'] ]; $this->validate(); } }
    • Validate! Within our controller, load up our validator and validate the input. // UserController public function postRegister() { $input = Input::get(); App::make('UserValidator', [$input])->register(); return User::create($input); }
    • Now what? • When validation fails it will throw an exception: if ($this->validator->fails()) { throw new ValidateException($this->validator); } • We need to catch that exception and return a nice status code and error message, along with any validation errors. • Laravel 4 provides an excellent way of managing this.
    • Laravel 4 error handling Create an error handler that is specific to validation exceptions: App::error(function(ValidateException $exception) { $errorResponse = [ 'message' => $exception->getMessage(), 'errors' => $exception->getErrors() ]; return Response::json($errorResponse, 422); // Unprocessable entity });
    • In conclusion • Complex validation should be in its own domain • Helps to clean up our code, making it more readable • Let the framework handle exceptions for you! • Best for large applications (not so applicable to small apps)
    • Thank you.
    • You can catch me at the following online locales: • http://kirkbushell.me • http://github.com/kirkbushell • @kirkbushell