A Very Simple API 

development-api

There comes a time in the life of a developer where he/she is forced to deal with an API, be a desktop or a web developer, in some time it will be necessary.

hot-head

Also, maybe, the developer will need to create it’s own API and then is where the things get a little bit difficult. There is a lot of concerns, discussions and suggestions around API standards but none of them are still the definitive right way to build an API, so as always each developer builds the code as it wants.

For me, everytime that I need to deal with a webservice, I study a lot, check the new standards look at the client needs and make the best effort to make the most light and precise services that the client wants. But thats the hard way, the easy way should be, to unpack a generic API code adjust some settings and start to delivery services… Should be like this.

crazyHarry

There are some nice tutorials and tools on internet about building an API, like with laravel and with apigility, but almost all have some framework dependencies and then I though in something more simple, just with the basic stuff, why not?

 

Considering all that, and on all the effort spend on every new webservice, I decided to make a very simple API pack with the basics to make a webservice to work, so here is what I tried to covered:

  • Auto detect XML-RPC or REST request;
  • Standard formated XML or JSON automatically (depending of the request);
  • Automatic deal with errors and/or warnings (saving in a log);
  • Resources to return standard field answers on requests;
  • Code injection protection;
  • Method request control and run according to the operation method request (POST, GET, PUT, DELETE, OPTIONS, PATCH);
  • Versioning control;
  • URL friendly following at least level 2 maturity level;
  • Start point to build my own custom webservice methods;

It’s not easy to cover all the resources of an API and still keep the code simple and dependencies free but I tried. In the end the result was very good but still have some work to do.

The code is avalibale on my github account and it’s free to use and to contribute. Note that this is not the “state of art” and any kind of contribution will be welcome.

The very simple API pack worked just fine and  can be used on every new project with just a few lines of set up on an specific settings file. Also, the use is very simple:

  1. Extend the main class AbstractService:
    class MyServiceName extends \classes\AbstractService
  2. Initialize the service with the needed settings:

    public function execute()
    {
    $this->initialize(['allowedMethods'=>[AMT_GET, AMT_POST, AMT_OPTIONS],
    'answerType'=>AST_AUTO]);
    }
  3. Add the code on the respective method and call the answer method:

    public function onPost()
    {
    //... your code here
    $this->answer([
    'message' => 'Here are the fields that the API received',
    'fields' => $this->getFields()
    ]);
    }
  4. Call the API from the browser:
    http://your-server-path/v1/MyServiceName

… and voilà!

vsapi-sample-answer
Sample JSON answer using AJAX on vsapi

Also, an error message:

vsapi-sample-error-answer
JSON error answer using AJAX on vsapi

And, a XML answer:

vsapi-xml-answer
XML answer using PHP on vsapi

PhoneGap Starter Kit

When I started to use the PhoneGap service to build mobile apps I had some dificulties on about where to begin or what should I use to get a very good looking app, even a simple “hello world” app was a bit difficult to do, so, here I will present a pack that I did with the basic stuff to start building a mobile app on PhoneGap.

cordova-phonegap-build

As covered in another post of mine, the PhoneGap is a handy tool that allow web developers to develop native mobile apps just using HTML, CSS and Javascript, for more details about the PhoneGap tool, take a look on that introduction.

The PhoneGap Starter Kit, as I like to call, is a pack with the very basic stuff to start a simple app throuh PhoneGap. This pack includes:

  1. Basic standard folder structure
  2. Index file ready to start
    • includes correct declaration of headers, script files, style files, meta tags
  3. File configuration to compile the app
    • icons, title, description, author
  4. Sample declaration of a plugin
    • needed to access native device resources (battery plugin in this case)
  5. Third party pop-up lib, bootbox
    • with bootbox is possible to add theme to the pop-ups instead of only using the native OS pop-up
    • Switch button style (to be more like device native)
  6. Bootstrap
    • Brings ease to start enviroment
    • Is resposive
    • Theme support
    • Accept many JS plugins
  7. Elements mods
    • Samples checkbox and selectbox modifications to looks like native device
  8. Dropdown Menu
    • Also responsive
  9. Custom Theme
    • Provided by Bootswatch just to show how to setup the theme

 

 

With this very basic kit is possible to compile a simple app on PhoneGap and start it nativelly on and Android, iOS or Windows Phone device.

Also, bellow are some additional links that can help on development:

  • Bootsnip: Many sample codes (forms, layouts, components)
  • Bootswatch: Theme gallery for bootstrap
  • Plugins: Plugins to interact with device resources
  • Cordova: Main lib of the PhoneGap

Mobile Development Using Javascript HTML5 and CSS3

Actually is hard to think in any new service without creating a mobile app, be a sales store, a social resource, any delivery service or even a game, all want to be present on mobiles.

Until some years ago, the ability to make a mobile app was just limited to those who knows C, C#, Java or yet other proprietary language, but than, comes the Adobe PhoneGap tools who give to all web developers the chance to build a native app using web coding knowledge.

build-diagram

The PhoneGap Service is free for building open-source apps through the github account, or in case of private projects the price depends of the plan. On free account the user can have at least one private project.

wms-framework-sample

The PhoneGap uses the Apache Cordova lib and a web based rendering engine to make possible to run the HTML, CSS and Javascript content. The tools provided also includes a lot of plugins that makes possible the comunication to native resources of mobile devices like: giroscope, camera, contacts, files and all that native stuff without worring about the coding language, just add the plugin and code in javascript.

phonegap-architecture

Basically, to get started, the developer just need to make or have an Adobe Id and subscribe to the PhoneGap Enviroment. After that the developer can download the desktop tools to build, compile and test the developed apps. Also, instead of download any software, it’s possible to code a native web app and upload a zip file to the PhoneGap Enviroment just to compile.

The online PhoneGap Compiler is fast, accepts to compile with your developer key and also gives a QRCode to download teh compiled app to test.

The PhoneGap compiler actually can build apps for Android, iOS and Windows Phone, which is very handy.

 

Generic or Custom API, which one to use?

api-538x294

On the past month I was working in a project, that seemed to be easy on the beginning, to create a kind of service that should be the core to delivery coordinates and weather information of trucks, airplanes and ships from an specific company, and, the project has extended a little (as always), because the client also wanted to add some extra resources like user control, sell credits to use the service among other details. In fact, it wasn’t so easy as I expected but in the end, we did it.

Our team made some research before develop anything and concluded that an API should be the right service to complete this project.

An API is not just a JSON or XML content, it’s more than that, it can have many aspects and involve different types of access, depending of the needs, the most common types are the RESTFul service which is more like an architecture over HTTP using different methods to make the operations and the RPC (Remote Procedure Call) service which is usually done via POST method sending payload information to define the operations. It was important to us to know exactly what are the client needs and what we should start to use.

Knowing about these and some other dificulties of building a web service API, we did what any sane developer would do… search on internet for some basic and simple API to build over it our own solution. Well, we didn’t find something easy and simple, but we have found the Zend apigility which is a fantastic API-based architecture and is based on Zend Framework, so we just gave a chance for it.

ag-hero

The apigility tool offered a great tutorial, many sample codes and can be setup almost by the admin enviroment, also, a complete set of answer types, allowed methods, filters, validations and is also documentation ready, it’s really amazing.

intro-first-rest-service-status-settings

But, “with great power comes great responsibilities”. The apigility is based on Zend framework, so it’s implicit necessary to have a good knowledge on the framework to make  a good job, also, we don’t felt like this is the right solution for this project, it was more like “A cannon to hunt a little bird”, and more crucial, the Zend framework would push us to do extra documentation and can be a possible problem in future updates, for the client, as we don’t have too much professionals available with this knowledge. So, we give up of apigility for now.

After some long discussions, following the team instincts, feelings, making some sketches, we kept the idea of making by ourselfs a PHP web service API, which should exactly fit our needs without lack or overage of resources.

There is a lot of discussions around the API standards and if it should be adopted or not, among them are the swagger specification and the Open API Initiative which are supported by many stakeholders like Google, Microsoft, IBM, Paypal and other giants.

We didn’t followed all the standard specifications that we found, but we focused in almost all of them to finish our API.

Was it worth? Well, we were a team of 3 person, we planned, documented, developed, tested and done the service in about 5 days and the client is happy and the project is working, so, the team and the client thinks it was worth it, that’s what matters. 🙂

api-sample-use
Sample use of the tracking API

Pebble Watch App Using JavaScript

I like to code… Every time that I have some some free time in front of the computer or reading about some new language or device, comes that feeling “what nice thing I can code using this?”.

So, this time I picked my Pebble Smartwatch as a playground and decided to make something new and exciting, ansmartwatch app.

Captura de tela de 2017-07-06 11.41.48

The Pebble Smartwatch was on of the pioneers on IoT and still is ahead of many devices of it’s category by providing the best recharge battery cycle, e-paper color display and common resources for everyday needs. Despite it’s discontinuity, after been bouth by Fitbit, the Pebble still is a very useful device with many interesting resources.

As the Pebble OS is not open source and can be disabled anytime by the Fitbit company, there is a very cool project called Rebble that is trying to reconstruct a similar OS for the Pebble device, based on FreeRTOS that is the same Pebble OS Base.

IoT devices usually have they’re code and apps based on C Language or some specific script language and its not different on Pebble Enviroment, it has an SDK and all that standard stuff… but there is also available a great service called CloudPebble which is a framework/compiler/interpreter to build Pebble Apps that accepts to code in javascript language, everything online, isn’t nice?

The CloudPebble is free to use, compile, emulate, generate app packages and it can also integrate with github. The better: You can code in Javascript! 😀

Captura de tela de 2017-07-06 11.45.54

Well, continuing to my new and exciting thing, it’s not really easy to do something new these days, there is almost an app for everything that you can think, so I decided to make something that will be useful for me: a currency app that keeps me updated with the currencies that I want (with a nice skin). Not that there isn’t an app for that, but I didn’t like any of those, I like to have a more “cute” app with some flag icons and nice options.

And the result of this job is here:

 

The CloudPebble makes use of the PebbleKit JS which is a javascript SDK to access native properties of the native Pebble SDK. It was fine to find the documentation for almost all functions that I need, and, testing the app was also not so hard.

I also have to use the YQL Plataform (Yahoo Query Language) to get the information about the currencies. Fortunatelly the YQL is free, have a good documentation and also many good sample codes.

The Currency Exchange App code can be found at my github account and can be downloaded to start a new project on CloudPebble.

Web Development Trends – Jul-2017

There is no doubt that developers/coders are one of the most requested professionals in the market these days. According to a research made by the Michael Page Recruitment Services, software engineers and developers are the most requested professionals on 82% of the countries that the research covered (Brazil, USA, Japan, UK, France, Chile, Mexico, Canada, Australia, Germany, Netherlands, Spain, Portugal, Italy, Sweden, Denmark, Switzerland, Ireland).

You may be thinthing “Yes, I’m in!”, but wait, you must be updated with the new technologies to be a part of this research.

Recently, looking at many job offers on linkedin that pops up on our profiles I surprisingly saw, besides long experience, a lot of new technologies and languages mentioned on the “you must have” session, some of them are obviously needed like HTML5 and CSS3 but some others are a few emerging ones like the javascript frameworks between others.

So, I listed here some of these must have topics that I found (Not in order of importance):

  • HTML5 + CSS3
  • Python, Ruby, Java, PHP (Some are already requesting the PHP 7)
  • PHPUnit Testing
  • ECMAScript 6 (Javascript)
  • Javascript Frameworks (NodeJS, AngularJS, ReactJS)
  • MongoDB, MySQL, SQL Server
  • AWS (Amazon Web Services)
  • Git
  • CollaborativeWeb Enviroments (Docker, Vagrant Box)
  • DevOPs
  • Frameworks (Zend, Laravel, Magento, Symfony)

These are not the only requests that I’ve been seen, but, almost of them was present in the jobs propositions. Anyway, this list shows that the professional of technology, specially the developers, are quickcly discarded if is not up to date with these new trends.

We must keep an eye on everyday news and never think that we already know everything. Opportunity calls people that are ready.

Wireframing Before Code

Starting a new software project is not an easy task for anyone, specially if you have a great imagination and some coding habilities. Sometimes the process of creating a simple app or utility can become a big and infinite nightmare with endless resources and pending ideas if it is not very well planned.

Among the traditional steps of documentation of a software project I usually like to start with the wireframing step (or sketch as some people like to say), where turns it possible to see how the final product will looks like and also bring some insights about the resources that need to be planned on the tasks. This kind of effort can save a lot of time, believe.

boogle-sketch

When wireframing the screens of the project is possible to see some options and some limitations that you only would remember when you see the final product. Also, this effort makes the process of filtering bad ideas that seemed to be good on your mind but did’t going well when applied.

bad-sketch-sample

There is not a standard way for wireframing, it is just a way to put your ideas and thoughts in a way that you and your coworkers can see what you are thinking to do. Follow some design patterns (mobile-patterns, pttrns) are a good choice if you dont know where to begin.

As wireframing is not a trivial task for me, and I just do it when start a new project, I don’t have a favorite app to do this, instead of that I always make a search on internet an find what is trending. On my past project I found the mockflow web app which is a very complete tool with a lot of resources and also have components that are similar to those used on developing, like: bootstrap, htm5, android, iphone, etc.

Mockflow is a paid app and also have a free version, which is limited by the number of pages that you can add on the wireframe project. For a free version is good enough.