Monday, 29 September 2014

SOA / API Development Tools Tips

Having been delivering SOA projects for over a decade, I’ve come across many tools some of which I hate and avoid using them (unless a client demands so)  and others that have made my life easier when delivering projects.
The below table is a recollection of tools I have used or come across which  I find useful and recommend SOA/API practitioners to use or at least evaluate. Enjoy :)
SDLC Tool Name Description + Links
Project/Scrum Management and Collaboration Jira Jira when used for scrum management is In my opinion is the the best tool I've used for managing scrums specially in an offshore / onshore distributed environment. It also has capabilities to manage GIT repositories which makes this an ideal tool for a complete cloud/based agile project with users all over the world.
Agilo I used this tool some time back successfully in a large onsite SOA project and it worked very well for us. Product has come along way since then and It's more feature rich than it used to be. It has a 30 day trial.
Trello Very simple, lean and easy to use project/task management and collaboration tool. It’s free for any number of users, can log-in using Google account.

Thanks Darren Atkinson for this tip!

Furthermore there are some awesome plug-ins to use it for Agile projects:
Coop App very clean UI supporting features such as share status updates, questions, links, and others.
PBworks Suite of tools including in-app instant messaging, live notifications of changes to work spaces, live editing of documents, voice collaboration, wiki, and others. Can be used for full collaboration including project management.
Configuration Management GitHub I have been using this tool recently but found it amazing specially because of the GitHub client which is not intrusive to filesystem (like Tortoise and that create issues some times in the local file system) and very easy to use. It's social collaborative capabilities are awesome but also supports private projects however this latter feature it's not free. Also there are tutorials online.
Subversion This is the version control system I've used the most and still using the most in client side. Compare to any other traditional version control system (i.e. CVS, Clear Case, MSTFS, RTC) I think this outperforms them all, not only because of it’s simplicity, but because of the wide availability of subversion clients available and community support. My preferred client is Tortoise. Also there are clients available for JDeveloper. There is different installation options. The apache option can take longer as you have to install Apache HTTP s ever separately, for this reason I used collabnet which is very easy to use but has some licensing implications. There is also bridges available to link subversion with other repositories such as GitHub, or to use SVN clients against repositories other than subversion.



Jdeveloper Subversion Extension (added from Jdev directly)

Jenkins The best continuous integration tool I have used so far (even when compared to proprietary tools like IBM BuildForge). There are so many plugins available like for example reporting, performance testing, Maven integration, which makes this a true gem when implementing large integration projects.
Dockers In simple words, Dockers it's a new paradigm for creating portable applications that are available in the cloud and can be checked out and run in multiple platforms that have Dockers installed. Yes, it's that simple. Dockerized apps can be checked out from a central server, can be modified, re-packed, checked into the cloud again and so on... Reason I say it's a new paradigm is because Dockerized apps are basically running in fully segregated compute capacity of the underlying OS, so basically it's sort of like a virtualised environment, but it's not. It's just a container ! there is a great tutorial in the following link:
Puppet Put simple, Puppet it's a framework to automate the installation and configuration of systems / applications in a variety of environments, i.e. from sandbox, to dev., SIT, UAT, NFR, Prep rod, to production. Puppet is very robust and it's very scalable. By creating Puppet manifests using a DSL based on groovy, you can define the installation steps of complex systems and complex topologies such as Oracle RACs and Oracle SOA Suite clusters. It comes in 2 flavours, an open source version which has several restrictions (i.e. no GUI), and a licensed version puppet enterprise) with is more feature rich. For puppet to work in a distributed environment, there is a Puppet central server which stores all the manifests (in a YAML store) and puppet agents which are deployed into the targets where software will be installed and configured. There is a new type of "masterless" configuration being popular now days which removes dependency on the master server.
Chef Conceptually it's a similar solution to Puppet. However instead of DSL based on groovy, it's DSL it's Ruby. Also instead of "manifests" you create "recipes". Some people from a sysadmin background don't like this and also the fact that it uses JSON data structures, and a Postgress data base. However if you come from a web development background (like me) this should not be an issue at all! in fact the opposite. Chef also comes in different flavours Chef Essentials (Free), Chef Subcription, and Site. Also there is a hosted options. To be frank, I found the flavours a bit complicated to undersand.... Chef also relies on a client/server architecture, where a server contains all recipes and the clients are deployed to the nodes where installations/configurations will take place. Note that although there is a free version, Chef it's in fact not open source....
Ansible The work of Michael DeHaan (creator of Cobbler a popular linux install server), it's yet another CM tool but unlike Puppet and Chef it does not follows a client/server architecture meaning that is agentless. It follows a push model and it's transport it's SSH. Configuration files are store in YAML "playbooks" (equivalent to recipes or manifests). The playbooks can actually reside on any node and then as said configurations are pushed using SSH. This makes Ansible of all options the simplest one (in theory as in practice I haven't tried it yet but I willl as I find it very attractive).
API Management & Governance API Catalog 12c New product released at OOW! a light-weight version of OER, fantastic tool to create a catalogue of your available services and APIs without the hazard of implementing a full OER solution. Basically all you need to do is set install API Catalog (with same binaries as OER 12c) and harvest your OSB and SOA Domains or WSDL/WADL URL’s directly. It has a very clean and nice new UI so you don’t have to worry about all the complexity of OER.

To install download OER 12c and select API Catalog install option.
API Manager 12c New product released at OOW! not out yet, but will be soon!. Basically built on top of OSB, it will allow you to define from OSB console or JDeveloper which OSB Proxy services are “managed” and then they will become available in API Manager. API Manager is basically an application which will provide a facility for API designers as well as API consumers to access and use/managed your published APIs. At present this product is not meant for DMZs but rather for internally published APIs. For DMZs, API Catalog is a better options.

Not available for install yet.
Oracle Enterprise Repository (OER) 12c Will not say much about this as my blog is full of information about this tool plus I've written a book about too. One thing though, many companies are in a phase now to try and modernise and transform their services landscape, this tool can help gained proper visibility over existent assets therefore create a proper inventory of available assets which can then be used to re-design / transform the solution into a more mature state and also avoid ending up in more duplication as transformed services will be visible/searchable in the repository. There is a coming 12c release of the products which will provide new flavours of the product, one of which is light-weight and focused for API management.
Design MOGUPS If you also have a requirement to build a UI mockup for your services, this is a fantastic online tool to do all of this. I really found it easy to use and feature rich. It's not free but monthly fee are reasonable.
INK Scape My preferred tool to create killer vector-based diagrams when doing design. The best of all, it's open source.
Tools for generating UML like designs: Although InkScape it's great for graphics, when it comes to generating UML like diagrams, it really falls a bit short specially when it comes to creating a central-collaborative repository. For this purpose the tools I usually end up using are:
1) Sparx Enterprise Architect: The best tool out there in my view but not cheap.

2) MS Visio (the obvious option): Good tool but lacks strong collaborative features like EA
3) JDeveloper for Sequence and Class diagrams (although it's not really the best tool for this): Option if there is no EA or visio license
Build Oracle JDeveloper As an Oracle SOA expert, this is the IDE of choice for building SOA composites and OSB services and APIs. 11g version is very good however the 12c version truly is a gem and so much capabilities are now available in the tool (such as building OSB's proxy/business services and OEP streams).
XML Spy I still believe this is the best XSD / XML editor there is. Specially when building complex canonical models with tons of inter-dependent schemas, this tool truly steps up. Unfortunately it's not cheap! But in large projects with tons of XML editing, purchasing it can be justified based on productivity gains
Online Json Editors There are some excellent online JSON editors available. Here some links of the ones I often use:
Notepad ++ Many times we want to edit files quickly and that aren't necessarily related to a JDEV app or project (i.e. config files, shell scripts, etc). For this scenarios instead of using notepad, I always used Notepad ++. I think is the best editor out there for windows plus it has some very useful plugins
JSToolNpp for Notepad ++ Excellent Notepad ++ JSON viewer plugin
D3 Not really a tool but rather a JavaScript lib. The most powerful graphic generation library I've seen so far. Combining the graphic capabilities of this library with your solutions will deliver a greater impact to the consumer of the solution. At the end of the day "if you can't draw it you can't understand it" and with this tool, you can generate hundreds of different views to exploit your data.

Free eBook available in following link:
Testing Gen Rocket Generating robust and meaningful test data dramatically improves the quality of the code as test cases become more relevant and scenarios more realistic. However this is often an undermine task and it's usually developers that end up creating test data which not always covers all required scenarios or is meaningful enough. A colleague of mine shared this tool and although it's not open source, it does provide some very good features to create projects to generate data for defined data objects and automate the generation of test data at a massive scale. Data can be generated in several formats such as XML, csv, etc.
GenerateData A very simple, web based, free tool for generating test data. It all can be done online and data can be generated in different formats like csv, xml, JSON, SQL, LDIF, etc.
Mockaroo Another  simple, web based, free tool for generating test data. It all can be done online and data can be generated in different formats like CVS, JSON, Excel, and DB. It has far more data types than GenerateData and i find it more feature rich too.
Oracle SOA Suite Test Suite Great feature of SOA Suite available in Jdeveloper to create and automate unit test scenarios to test composite wires and components. It can also be integrated with Jenkins jobs for example for continuous integration / regression testing
POSTMAN Probably the best tool out there to test RESTful APIs. Discovered this tools whilst doing the Mobile Cloud Service (MCS) Summer Camp!!
SOAPUI This is now a well know tool in the industry for testing web services. However incredibly as it sounds not every knows that the tools can also be used to generate service stubs and to do performance and penetration tests although these last too require purchase of a license, but still an awesome tool.
Code Compliance Inspector (CCI) Comes in two flavours. As JDEV plugin and also with OER as a utility. I had issues with the former but the latter worked quite well for us and we also managed to incorporate CCI code check as part of our build/deployment/continuous integration process. So every time someone checks code into main branch, we actually automatically checkout the code, do a CCI code compliance test and then build and deploy. If code is not compliant we send a error notification to a distribution list.
Zed Attack Proxy (ZAP) Created by OWASP community, this is a fantastic open source tool to test security vulnerabilities in web applications and can also be used for testing REST and Web services
Apache JMeter For me one of the best open source performance testing tools available, allows for all sort of performance tests to be created either for simple HTTP requests or for web service or REST service invocations. It supports distributed and multi-threading testing.
WSDigger It's an open source tool for testing security on web services. Haven't use this tool vastly but I used it against standard SOAP based services and it worked well. I however don't see that it has been updated recently which is a shame really!
Production Support Xymon Really awesome, open source and lightweight tool to monitoring web services, networks, etc by using different extensions available. For web services, XYMON can be used to monitor health of HTTP endpoints for example and to ensure that services are up and running. When issues are identified, XYMON can be confirmed to send notification alerts via SMS and email amongst others.
Oracle Business Transaction Management 12c BTM for transaction monitoring
Oracle BAM 11g/12c BAM for activity monitoring and user/business facing dashboard:
Oracle Enterprise Manager 12c OEM for operational monitoring (App performance management, instance status, health checks, etc.)

No comments:

Post a Comment