Eve: Building RESTful APIs with MongoDB and Flask Transcripts
Chapter: Fine-tuning your REST service
Lecture: A small refactoring
0:00 All right, we are ready to go in production,
0:02 but before we do that, we probably want to do some little refactoring.
0:06 What I want to do here is implement the separation of concerns design principle
0:12 which I find to be super important
0:14 when we're building some larger website or web service.
0:18 So what I did here is I created an authentication script
0:22 and I moved the authentication class there.
0:25 Then I also created a callbacks script
0:30 and I moved my callback functions right there
0:34 and again, I created the validation script where I moved my validator class.
0:39 So my app script, which, remember, is our launch script
0:43 now is simply importing these features from their own modules,
0:49 and then we are instanciating our Eve class passing the validator,
0:54 the redis instance, if we need to, we can pass our authentication class.
1:04 And yes, we still have this custom route here
1:07 we could eventually move it elsewhere in its own module,
1:12 if we had more than one custom endpoint, probably we might want to do that.
1:18 And then, we are simply attaching our callback function to our app.
1:22 So the launch script only concentrates on creating the app
1:27 and preparing it for launch.
1:29 And by the way, this separation of concerns principle
1:35 can also be applied with success to the settings file
1:38 and specifically to the domain.
1:41 Look at what I've done here.
1:43 I created a folder, I called it domain and within the domain folder,
1:48 I have two modules, people which contains
1:52 the endpoint definition for of course, the people endpoint,
1:55 with the schema and optional rules, like authentications or disabling hateoas,
2:02 And then I have a works.py where I'm just defining the works endpoint.
2:08 Now, look at this file __init__.py,
2:12 this is not a regular folder, this is a Python package, actually.
2:17 And here I'm importing the two definitions from people and works,
2:22 and I am creating the domain dictionary.
2:26 So what I'm doing is allowing the people and works definition
2:31 to live in their own modules
2:33 so they can grow over time without polluting the settings file.
2:37 Since domain is a package in my settings file,
2:41 all I have to do is import the domain dictionary here
2:45 and then my settings file is clean from endpoint definitions
2:49 and all it has to store are global settings for my API.