Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How Follow the Don't Repeat Yourself Principle When Consuming My Own Laravel API?

I'm developing a Laravel 4 app that will make the same CRUD operations on my data set available through a JSON REST API and a Web UI. It seems that to prevent breaking the DRY principle that my UI should consume my own API by routing all requests from the UI back to the API. I'm unsure though about the best approach to making this work. Presumably I would have separate UI and API controllers and somehow route the requests through. Or should I be looking at a different approach altogether?

like image 799
robjmills Avatar asked May 13 '13 11:05

robjmills


People also ask

Is Laravel good for RESTful api?

He also developed Laravel apps and APIs, as well as AngularJS apps. With the rise of mobile development and JavaScript frameworks, using a RESTful API is the best option to build a single interface between your data and your client. Laravel is a PHP framework developed with PHP developer productivity in mind.

Can I use Laravel for api only?

If you still considers the option of using laravel 9, then I will suggest doing the following: Using the api routes only. Implementing JWT https://laravel-jwt-auth.readthedocs.io/en/latest/laravel-installation/ [Optional] Change the exception handler to output errors as not expose details of your applications.


1 Answers

I'm actually tinkering with the same idea and it's pretty neat. With Laravel you do have the ability to make internal requests (some might refer to this as HMVC, but I won't). Here's the basics of an internal request.

$request = Request::create('/api/users/1', 'GET');  $response = Route::dispatch($request); 

$response will now contain the returned response of the API. Typically this will be returned a JSON encoded string which is great for clients, but not that great for an internal API request. You'll have to extend a few things here but basically the idea is to return the actual object back through for the internal call, and for external requests return the formatted JSON response. You can make use of things like $response->getOriginalContent() here for this kind of thing.

What you should look at doing is constructing some sort of internal Dispatcher that allows you to dispatch API requests and return the original object. The dispatcher should also handle malformed requests or bad responses and throw exceptions to match.

The idea itself is solid. But planning an API is hard work. I'd recommend you write up a good list of all your expected endpoints and draft a couple of API versions then select the best one.

like image 174
Jason Lewis Avatar answered Sep 29 '22 11:09

Jason Lewis