I have created a service item in the train to work as an interface between our app and our API.
I got this idea
Here is a small example:
class packagecceptor def self.get_package (package_id) raise ArgumentError.new (" Package_id can not be zero ") if package_id.blank? Package = API :: get "/ packages / # {package_id}" package = JSON.parse package ,: symbolize_names = & gt; Unless the package.blank happens? For assumptions:
- I have to check all the inputs of zero or wrong type. Is there any way to easy verification? Maybe a rail extension?
For errors:
- I can capture all API errors and then return zero to safely. But programmers using the service object may not know the meaning of zero.
- I can catch API errors and raise another error which means that it is an extra effort to do all the tasks
- The third option is to leave it and the programmer Handle all the errors from the API.
Let me know if you know a good pattern or if you have better suggestions for having an API interface.
. As soon as you start complex cases (many logic, objects, etc.), then I start to tilt.
Refer to them (see "remove form object"). Sometimes use something like, to build service items. E.g.
requires 'active_model' to require 'virtus' class CreatePackage includes vertech in ActiveModel :: Validations attribute: name, string attribute: author, string Validates_presence_of: name, : To create the author def, ArgumentError.new ("Invalid Package") does not own unless Valid? Feedback = JSON.parse (API :: Post ("/ packages", auto attributes),: symbolize_names = & gt; true) package. New (answer) end-end class package includes Virtus attribute: id, integer attribute: name, string attribute: author, string and # example Service = CreatePackage.new (: name = & gt; "Tim Toms",: author = & gt; "Tim",) service.valid? # truth; If false, then service.errors package = service.create package.attributes # = & gt; See. {: Id = & gt; 123 ,: Name = & gt; "Tim Tom's",: Author = & gt; "Tim"} As an exception, I leave them for small tasks (like this service class). I'll wrap if I'm writing something more important, however, a complete API client library. I will never return zero like a network error, or bad or amazing feedback from the server both benefit from the obvious errors.
Finally, there is a much more complex approach that is called. Even if you do not use it, then there is a bunch of ideas about how to deal with service items, assumptions and results, which you can find interesting.
Edit : Also, check-out. In addition to simple and less comprehensive, like use_case
No comments:
Post a Comment