Friday, May 30, 2014

Best API Documentation Tool

Options:
APIGEE SmartDocs
Swagger
turnapi
Custom Website

3Scale.net - Active Docs (Use Swagger as Specification) [Out]
   https://support.3scale.net/howtos/api-configuration#active-docs


Not Candidates:
Docco
Dexy

Tools:
Doxygen

Best API Platform:
1. WSO2 API Management
2. APIGEE
3. Mashery
4. Layer 7
5. 3scale
6. Mulesoft

Evaluation Considerations:
1. Out-of-the box developer Tool
2. UI Experience
3. Language Agnostic
4. Code Level Documentation
5. Support JSON and XML
6. Support WADL
7. Demo/Documentation
8. Modify documentation directly on the system, instead of code.
9. Customers
10. Google Trends
11. Open Source
12. Sync with Git
13. Swagger-based documentation
14. Scalability to support chosen API Management Platform
15. Compatible with different REST publishing Framework - JAX-RS

Directions/Principles:
1. Choose the API Doc tool which can work with corresponding API Management Platform.
2.

API Platform:
APIGEE
Mashery

Directoins:
1. I would lean towords using API Docs with APIGEE
2.

Learnt:
1. Docco is not good for API Documentation
2. SOA strategies mostly target internal users; open Web APIs target mostly external partners. So API management requires developer portals, key management, and metering and billing facilities that SOA
management never provided.
3. API management platforms deliver important additional capabilities: developer portals, key management and approval, and metering and billing. Most companies don’t support these requirements in their existing SOA governance strategies.
4. Examples of vendors with API-native solutions are 3scale and Mashery
5. Examples of vendors with SOA-native solutions are IBM, Layer 7, and Vordel
6. Another solution vendor that began in this market segment but is now targeting API management is Apigee, formerly Sonoa Systems. Apigee’s API management platform bears some resemblance to Mashery’s cloud-based developer portal.
7.

Knowledge Sharing:
1. It does, however, require the capabilities of the service be described in the structure of the Swagger Specification. Not all services can be described by Swagger--this specification is not intended to cover every possible use-case of a REST-ful API. Swagger does not define a specific development process such as design-first or code-first. It does facilitate either technique by establishing clear interactions with a REST API.

API Platform Comparision:
http://www.ca.com/us/~/media/Files/IndustryAnalystReports/The-Forrester-Wave-API%20Management-Q1-2013.pdf

References:
http://mestachs.wordpress.com/2012/08/06/rest-api-documentation/




Wednesday, May 21, 2014

Master Groovy on Grails



Levels:
1.  Compare Groovy on Grails vs Play Framework
2.  Compare Groovy vs Java
3.

Learnt:
1.  Grails have many plugins, which can be installed to work with specific component. Grails is a platform, similar to Predix platform.
2.     Item             Grails Platform                            Predix Platform
     Community    Grails Community                          Company
     Plugins           Different Developers/Teams          Platform/Solution/Project Team
     Pluggable       Yes, out of box                              Yes, out of box
     Tech               Convention over configuration      OSGI
     Languages      Groovy/java
3.  Scala over Groovy  
4.

Learnt:
1.  Groovy can use Spring injection to inject service to groovy class.
2.  Groovy can map domain object to database tables.
3.  Groovy doesn't know what is the default package structure
4.  Grails support spring mvc and spring webflow
5.

Disadvantages of Grails:
1. Don't have web.xml, and difficult to add filter. Otherwise, I have to find workaround.
    Workaround: "grails run-app" == "grails -Dgrails.env=development war"
    There is a big gap between grails run-app and "mvn clean install"
    Don't use "mvn clean install" to create war, instead, use "grails war" to create war file.
    The production enviornment shall be the same as development environment.
2.  During development, I use "grails run-app"; and During deployment, I shall use "grails -Dgrails.env=development war"
3.  This is a grails project, and we shall remove the maven dependencies moving forwards. need to dig why it can resolve this.
4.