REST

From BC$ MobileTV Wiki
Jump to: navigation, search
RESTful Web Services

REpresentational State Transfer (also refered to as RESTful Web Services; commonly abbreviated REST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web. The terms “representational state transfer” and “REST” were introduced in 2000 in the doctoral dissertation of Roy Fielding [1], one of the principal authors of the Hypertext Transfer Protocol specification. The terms have since come into widespread use in the networking community.[2]



When REST works best

RESTful Customer & Order resources example

It's been offered by Web Service researchers that we consider the best use-cases for REST as it may not be optimal for all data sharing, exposing and integration needs. At the same time, with its robustness and scalability limited only by the already flexible HTTP protocol it was built on, it can be fitted to satisfy most needs (though some situations may be incredibly intuitive while others may be painful, in particular SOAP infrastructure migration or certain server-side automation tasks, and high-level security or service-level authentication and authorization).

REST data (artifacts) should be living documents, like Wikipedia, rather than static editions. But like Wikipedia, they need to be "curated". Or if you prefer a different metaphor, think of them as parts of an "insight engine" for driving your business, which collectively need to be lubricated and maintained to run your business at peak performance. Based on recent assignments, I'm convinced there's a 20-30% time-to-market advantage associated with having these things up to snuff.

RESTlet founder Jérôme Louvel poses the following question you should also ask yourself, before choosing REST: "Do you want to embrace the architecture of the Web and benefit from its simplicity and scalability?" Then in that case (which sounds like most) REST is probably a good fit for you.

"To this end, what's most important to creation of a truly RESTful Web Service is having:

  1. a map that shows where all the data lives,
  2. a dictionary that explains what a piece of data (or parameter) means,
  3. a directory that explains how to get to the data,
  4. a guide that describes how routine analytics get done and associated decisions get made, and
  5. a library (searchable at minimum, if not indexed) that stores all of the individual bits of research (again: queries, regressions, tests, benchmarks) and conclusions you've reached in the past."

[3]


Specifications

Richardson maturity model - how RESTful are your WebServices?

[5] [6] [7]

JAX-RS

HATEOAS

Hypertext As The Engine Of Application State (HATEOAS) means that the hypertext response returned by a RESTful service/server should be used to find one's way through the application/service's RESTful API. The service navigation or "operation discovery" is provided by <link> elements and named rel attributes specifying what "operation" or "calls" are valid within a specific path. It is said by REST purists that HATEOAS is the "most RESTful option", when it comes to architecting your REST API.

[8] [9] [10] [11] [12] [13] [14] [15] [16]

Siren

Siren is a hypermedia specification for representing entities, commonly used in combination with HATEOS (although admittedly more commonly you see custom XML/JSON specs used with HATEOAS, and, Siren could be used on its own as well in more of a POX/POJ manner).


OHM

OData

Open Data protocol for REST APIs (commonly abbreviated as OData) is an "open protocol to allow the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way", it has formats/versions that are compatible with either JSON or Atom/XML. OData aims to provide focus on your business logic while building RESTful APIs without having to worry about the various approaches to defining request & response headers, status codes, HTTP methods, URL conventions, media types, payload formats, query options, and other similar Web Service fundamentals, just to publish an API. By using OData this will be defined for you and tools are provided to help bind/publish your API in the correct format.

[22]


WADL

Web Application Description Language (WADL) is a port of WSDL for describing RESTful API endpoints.


RAML

Restful Api Markup Language (RAML) is a machine-readable API design standard that is actually human-friendly. It is based on the YAML spec. RAML has mechanisms for the definition of HTTP-based APIs' paths, data types, sample requests, access security, creating client/server source code, and comprehensively documenting the APIs for users in a generated HTML page that is easy to read. The "R" in RAML indiicates that it is ideal for APIs which embody principles of Representational State Transfer (REST).


OpenAPI

OpenAPI (Swagger 3.0+) logo

The OpenAPI Specification (commonly abbreviated as OAS) is an initiative to encourage public access (where possible legally/financially) and in the very least consistent documentation, accessibility and reliability for APIs. It makes use of the Swagger 2.0 specification to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of a specific Web Service without requiring access to source code, design documentation, or the carrying out of painstaking network-traffic inspection throughout regular usage of the API in their supported client (i.e. Wireshark while using a Desktop app, LiveHTTP Headers when accessing a WebApp, etc). When properly defined, a client/consumer can understand and interact with a remote service/device with a minimal amount of implementation logic.

Those behind OpenAPI believe that an "open description format for API services that is vendor neutral, portable and open is critical to accelerating the vision of a truly connected world".

The following image compares Swagger 2.0 spec (later referred to as OpenAPIv2) against the OpenAPIv3 spec which has made some minor structural changes to the base YAML & JSON schema descriptor formats:

Swagger (OpenAPIv2) to OpenAPIv3

[29] [30] [31] [32] [33] [34] [35]

[43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58]


Swagger

Swagger is a set of tools enabling simple yet powerful representation of your RESTful API via the OpenAPI spec. With the largest ecosystem of API tooling on the planet, Swagger is used by developers in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation, discoverability, instant testability and more.

In 2015, Swagger 2.0 was donated to the OpenAPI initiative as an open source standard by SmartBear (creator of SoapUI and many other industry-leading Testing tools). Originally intended as a cleaner alternative to the other SOAP "WSDL-inspired schema formats" for describing RESTful APIs that were emerging in the 2000s-2010s such as WADL & RAML, the humble "Swagger API spec" has come a long way since it was used privately by Reverb (formerly known as "Wordnik") before its acquisition by SmartBear. Both the Swagger 2.x and more recent OpenAPI 3.x versions are now used by many of the top technology companies and Swagger tools were downloaded over 15000 times per day as of 2018.[59]

[60] [61] [62] [63] [64] [65] [66]/ [67] [68] [69]

[70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108]



Tools

JAVA

RESTlet

RESTlet is a JAVA library for implementing the REST protocol. It provides the following features:

  • Core REST concepts have equivalent Java classes (UniformInterface, Resource, Representation, Connector for example).
  • Suitable for both client-side and server-side web applications. The innovation is that that it uses the same API, reducing the learning curve and the software footprint.
  • Restlet-GWT module available, letting you leverage the Restlet API from within any Web browser, without plugins.
  • Concept of "URIs as UI" supported based on the URI Templates standard. This results in a very flexible yet simple routing with automatic extraction of URI variables into request attributes.
  • Tunneling service lets browsers issue any HTTP method (PUT, DELETE, MOVE, etc.) through a simple HTTP POST. This service is transparent for Restlet applications.
  • Ready for the Semantic Web (Web 3.0), with built-in RDF supports being added to Restlet 1.2.

RestEASY

RESTEasy is a JBoss project that provides various frameworks to help you build RESTful Web Services and RESTful Java applications.

CXF and Spring

PHP

C#

NetKernel

1060® NetKernel™ provides a development and computing environment that is simple in concept and far-reaching in implication. The NetKernel open source community is focused on learning how to leverage and extend the technology to a wide range of fields and applications.

Resources

Google

Google REST AJAX API for "Transformers Movie" (defaults to JSON)

http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=transformers+movie

(XML and SOAP return formats no longer supported by Google Search API)

Yahoo!

Yahoo! Web Search for "Transformers Movie"

http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=transformers+movie

Defaults to XML return type, for JSON append &output=json

http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=transformers+movie&output=json

Others

[113] [114] [115]

Tutorials


External Links


References

  1. “Architectural Styles and the Design of Network-based Software Architectures”: Dissertation for Doctor of Philosophy, by Roy Thomas Fielding
  2. wikipedia:REST
  3. Pragmalytics, Part II: http://www.octavianworld.org/octavianworld/2008/08/pragmalytics-pa.html
  4. Roy Fielding's Thesis - Architectural Styles and the Design of Network-based Software Architectures (see Chapter 5 on REST): http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf
  5. Richardson Maturity Model: https://www.martinfowler.com/articles/richardsonMaturityModel.html
  6. Know how RESTful your API is -- An Overview of the Richardson Maturity Model: https://developers.redhat.com/blog/2017/09/13/know-how-restful-your-api-is-an-overview-of-the-richardson-maturity-model/
  7. What is the Richardson Maturity Model?: https://nordicapis.com/what-is-the-richardson-maturity-model/
  8. wikipedia: HATEOAS
  9. REST HATEOAS - How does the client know link semantics?: https://stackoverflow.com/questions/24656177/rest-hateoas-how-does-the-client-know-link-semantics?rq=1
  10. REST, Hypermedia & HATEOAS: https://developer.paypal.com/docs/integration/direct/paypal-rest-payment-hateoas-links/
  11. HATEOAS and the PayPal REST Payment API: https://developer.paypal.com/docs/integration/direct/paypal-rest-payment-hateoas-links/
  12. On-Demand Webinar -- Making Sense of Hypermedia APIs - Hype or Reality: https://www.roguewave.com/events/on-demand-webinars/making-sense-of-hypermedia-apis/thank-you
  13. Why I Hate HATEOAS: http://jeffknupp.com/blog/2014/06/03/why-i-hate-hateoas/
  14. Hypermedia APIs (using xHTML parser & <link rel="CONTEXT" />): https://vimeo.com/20781278
  15. Introduction to Hypermedia REST APIs (HATEOAS): https://www.mscharhag.com/api-design/hypermedia-rest
  16. HATEOAS without links (possible but non-standard): https://www.mscharhag.com/api-design/rest-hateoas-without-links
  17. OData icon usage: http://www.odata.org/odata-icon-usage-guidelines/
  18. Python CLI OData Validator: https://github.com/DMTF/Redfish-Tools/tree/master/odata-csdl-validator
  19. New version of OData Validator: http://www.odata.org/blog/odata-service-validation-tool/
  20. OData Validator (SLIDES): https://interopevents.com/uploads/1477122669384-OData%20Validator.pdf
  21. Testing and Consuming OData Services using Fiddler, LinqPad, Excel and SharePoint: http://www.dotnetcurry.com/sharepoint/882/testing-consuming-odata-fiddler-excel-sharepoint
  22. Understand OData in 6 steps: http://www.odata.org/getting-started/understand-odata-in-6-steps/
  23. A RAML / APIHub Plugin for SoapUI: http://olensmar.blogspot.ca/2013/12/a-raml-apihub-plugin-for-soapui.html
  24. wikipedia: Open API
  25. wikipedia: List of open APIs
  26. Planning Your API Strategy for 2018 -- Tools and Resources to Set Your Team Up for Success: https://swagger.io/blog/api-tools-and-resources/
  27. OpenAPI Generator: https://openapi-generator.tech/ | SRC
  28. The OpenAPI 3.0 GUI: https://dzone.com/articles/the-openapi-30-gui
  29. Tutorial - Converting your Swagger 2.0 API Definition to OpenAPI 3.0: https://blog.runscope.com/posts/tutorial-upgrading-swagger-2-api-definition-to-openapi-3
  30. What Is the Difference Between Swagger and OpenAPI?: https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/
  31. Convert Swagger 2.0 to OpenAPI 3.0: https://dev.to/derberg/convert-swagger-2-0-to-openapi-3-0-3joj
  32. Migrating to OpenAPI 3.0 -- How to Convert (migrate) Your Existing APIs with Swagger Tools: https://swagger.io/resources/webinars/convert-api-to-oas-3-with-swagger-tools/
  33. How to convert OpenAPI 2.0 to OpenAPI 3.0?: https://stackoverflow.com/questions/59749513/how-to-convert-openapi-2-0-to-openapi-3-0
  34. Migration from Swagger 2 to OpenAPI 3: https://medium.com/javarevisited/migration-from-swagger-2-to-openapi-3-391f3e97da73
  35. Convert Swagger to OpenAPI using "swagger2openapi" playground: https://github.com/derberg/convert-swagger-to-openapi-playground (use command swagger2openapi --yaml --outfile ALC-openapi.json ALC-openapi.yaml)
  36. Add Swagger/OpenAPI to Your Existing APIs: How to Automate a "Code First" Approach to OAS at Scale: https://swagger.io/resources/webinars/automate-code-first-approach-swagger/
  37. Annotation Libraries for Generating OAS (And Other FAQs from Swagger Users): https://swagger.io/blog/api-development/swagger-annotation-libraries/
  38. Swagger Codegen (with maven plugin) for OpenAPI 3.0: https://stackoverflow.com/questions/49616529/swagger-codegen-with-maven-plugin-for-openapi-3-0
  39. Tutorial -- Coding a Swagger CodeGen Project: https://help.vertafore.com/devportal/content/howto/tutorial2_codingswaggercodegenproject.htm
  40. Swagger codegen tutorial example: https://howtodoinjava.com/swagger2/code-generation-for-rest-api/
  41. Interactive API documentation using Swagger UI deployed with Terraform: https://advancedweb.hu/interactive-api-documentation-using-swagger-ui-deployed-with-terraform/
  42. Looking to Create OpenAPI 3.0 For Your API? Swagger Inspector Has Your Back: https://swagger.io/blog/news/looking-to-create-openapi-3-0-for-your-api-swagger/
  43. Documenting a Spring REST API Using OpenAPI 3.0: https://www.baeldung.com/spring-rest-openapi-documentation
  44. Postman Supports OpenAPI 3.0: http://blog.getpostman.com/2018/12/11/postman-supports-openapi-3-0/
  45. Describing Request Body: https://swagger.io/docs/specification/describing-request-body/
  46. Quick manual way to create an OpenAPI spec from a GET API Request: https://dzone.com/articles/a-quick-manual-way-to-create-an-openapi-from-a-get
  47. Adopting a Design-First Approach with OAS 3.0 & Swagger: https://swagger.io/resources/webinars/adopting-a-design-first-approach/#adopting-design-first (and how to annotate/document legacy APIs)
  48. .NET Core with Swagger and C# Client: https://www.youtube.com/watch?v=TEdwxI0EGYg | DOCS | SRC
  49. Automatically Generating your API Client with Swagger and Swagger Codegen, by Jesse Collis: https://www.youtube.com/watch?v=EzKwi-u9jQo
  50. Spotting mismatches between your spec and your REST-API with hikaku: https://blog.codecentric.de/en/2019/03/spot-mismatches-between-your-spec-and-your-rest-api/
  51. Swagger/OpenAPI @ApiParam vs @ApiModelProperty: https://www.baeldung.com/swagger-apiparam-vs-apimodelproperty
  52. Doing More With Springdoc-OpenAPI: https://dzone.com/articles/doing-more-with-springdoc-openapi | SRC
  53. Postman Joins the OpenAPI Initiative: https://blog.postman.com/postman-joins-openapi-initiative/
  54. API Security -- Issue #88 - JWT pentesting, API discovery, the present and future of OpenAPI: https://apisecurity.io/issue-88-jwt-pentesting-api-discovery-present-future-openapi/
  55. API Scanning with Burp Suite: https://portswigger.net/blog/api-scanning-with-burp-suite
  56. Creating High Quality OpenAPI spec (OAS) Definitions with .Net Core https://42crunch.com/creating-high-quality-oas-definitions-with-net-core/
  57. What’s New in OpenAPI 3.1 - JSON Schema & WebHooks: https://www.openapis.org/blog/2020/12/15/from-apidays-paris-openapi-3-1-coming-soon
  58. Analyzing Trends Across 200,000 OpenAPI Files: https://nordicapis.com/analyzing-trends-across-200000-openapi-files/
  59. Introducing the Open API Initiative!: http://swagger.io/introducing-the-open-api-initiative/
  60. Visual OpenAPI (Swagger-compatible) API builder: https://apibldr.com/
  61. Chrome extension - SwaggerUI preview: https://chrome.google.com/webstore/detail/swagger-ui-console/ljlmonadebogfjabhkppkoohjkjclfai
  62. Swagger + SoapUI = true: http://olensmar.blogspot.ca/2013/05/soapui-swagger-true.html (true API testing/integration ease)
  63. Import swagger definition to SoapUI free?: https://stackoverflow.com/questions/35398889/import-swagger-definition-to-soapui-free#35412319
  64. (SOAP UI) REST Discovery - API with internal browser: https://www.soapui.org/rest-testing-discovery/rest-discovery---api-with-internal-browser.html (manually record your Swagger API sample requests to create SOAP UI re-runnable tests)
  65. Ready! API Plugin for importing Swagger definitions as REST Services: http://github.com/SmartBear/readyapi-swagger-plugin
  66. Swagger OSS Tools & Integrations: https://swagger.io/open-source-integrations/
  67. Swagger - DIFF: https://github.com/civisanalytics/swagger-diff (Utility for comparing two Swagger specifications)
  68. Introducing Swagger Brake: https://blog.arnoldgalovics.com/introducing-swagger-brake/
  69. Integrating Swagger Brake into Maven/Gradle projects: https://blog.arnoldgalovics.com/integrating-swagger-brake-into-maven-gradle-projects/
  70. SwaggerHub: https://smartbear.com/product/swaggerhub/overview/
  71. SwaggerHub -- Registry API - Integration: https://smartbear.com/product/swaggerhub/integration/
  72. Integrating with the SwaggerHub API: http://swagger.io/integrating-with-the-swaggerhub-api/
  73. Converting a Swagger YAML file to JSON from the command line: http://stackoverflow.com/questions/34733253/converting-a-swagger-yaml-file-to-json-from-the-command-line#34776563
  74. SwaggerHub - API Auto Mocking Integration: https://app.swaggerhub.com/help/integrations/api-auto-mocking (only available on SwaggerHub)
  75. Swagger 101 -- Writing Swagger definitions: https://app.swaggerhub.com/help/tutorials/writing-swagger-definitions
  76. Swagger -- Documenting Existing APIs (and their request/response formats): http://swaggerhub.com/wp-content/uploads/2017/02/Documenting-An-Existing-API-with-Swagger-2.pdf
  77. Introducing Projects -- A Better Way to Organize Your APIs in SwaggerHub: https://swaggerhub.com/blog/swaggerhub-feature/swaggerhub-projects/
  78. A Visual Guide to What's New in Swagger 3.0: https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/
  79. OpenAPI / Swagger Resource List for API Developers: https://blog.runscope.com/posts/openapi-swagger-resource-list-for-api-developers
  80. Swagger-Core Annotations: https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X
  81. Eclipse Plugin -- KaiZen-OpenAPI-Editor: https://github.com/RepreZen/KaiZen-OpenAPI-Editor
  82. Swagger markup in a Servlet (EXAMPLE): https://github.com/swagger-api/swagger-samples/blob/master/java/java-servlet/src/main/java/io/swagger/sample/servlet/SampleServlet.java
  83. How to integrate Swagger with Pure Servlet?: https://stackoverflow.com/questions/46460659/how-to-integrate-swagger-with-pure-servlet
  84. Swagger Documentation for Servlet: https://prabhukvn.com/2016/02/24/swagger-documentation-for-servlet/
  85. Generating Rest API documentation using Swagger or any other tool: https://stackoverflow.com/questions/19209926/generating-rest-api-documentation-using-swagger-or-any-other-tool
  86. How to create Swagger docs (manual example, using SwaggerUI statically): https://www.youtube.com/watch?v=xggucT_xl5U
  87. Swagger tutorial -- How to add Swagger OpenAPI to your REST API documentation: https://www.youtube.com/watch?v=wC5hxY0RItQ
  88. Generate client stubs & document your REST-API using Swagger & Spring: https://www.youtube.com/watch?v=43GhBbP--oI
  89. Simplified Spring Swagger project example: https://dzone.com/articles/simplified-spring-swagger (SpringFox lib)
  90. How to configure Swagger to generate Restful API Doc for your Spring Boot Web Application: https://dzone.com/articles/how-configure-swagger-generate
  91. How to document your JAX-RS API using Swagger, WAS Liberty Profile and Bluemix?: http://www.mycloudtips.com/2014/10/jax-rs-swagger-liberty-bluemix.html
  92. RESTful API Documentation Using Swagger and Spring MVC: https://www.3pillarglobal.com/insights/restful-api-documentation-using-swagger-and-spring-mvc
  93. Usage of Swagger 2.0 in Spring Boot Applications to document APIs: http://dzone.com/articles/usage-of-swagger-20-in-spring-boot-applications-to
  94. Can Swagger be used for SOAP?: https://stackoverflow.com/questions/25777601/can-swagger-be-used-for-soap
  95. REST enable your SOAP services (and document it with Swagger/OpenAPI) using DreamFactory: http://blog.dreamfactory.com/rest-enable-your-soap-services-with-dreamfactory
  96. How to integrate Swagger with Maven + Java + Jersey +Tomcat: https://stackoverflow.com/questions/25776968/how-to-integrate-swagger-with-maven-java-jersey-tomcat
  97. Swagger 2.0 - Maven plugin: https://github.com/swagger-maven-plugin/swagger-maven-plugin (JAX-RS & SpringMVC supported maven build plugin, helps you generate Swagger JSON and API document in build phase)
  98. Swagger 2.0 - Maven plugin example: https://github.com/swagger-maven-plugin/swagger-maven-example (example of using swagger-maven-plugin)
  99. Adding Swagger to Spring Boot: https://dzone.com/articles/adding-swagger-to-spring-boot
  100. Java/Spring -- How to Generate an Entire Swagger Documented CRUD REST API With Speedment: https://dzone.com/articles/javaspring-how-to-generate-an-entire-swagger-docum
  101. Javalin - Documenting endpoints with OpenAPI 3: https://javalin.io/tutorials/openapi-example
  102. Awesome APIs with Kotlin, Spring 5 and Swagger: https://medium.com/@cdimascio/awesome-apis-with-kotlin-spring-5-and-swagger-2687312a5270
  103. OpenAPI generator: https://github.com/OpenAPITools/openapi-generator | DOCS | Config Options for kotlin-spring
  104. OpenAPI generation for Kotlin in the Ktor plugin and website: https://ktor.io/blog/2018/08/openapi-gen.html
  105. Swagger for Kotlin: https://stackoverflow.com/questions/45304421/swagger-for-kotlin
  106. Simplifying API Pentesting With Swagger import files in "Burp Suite": https://rhinosecuritylabs.com/application-security/simplifying-api-pentesting-swagger-files/
  107. How to Turn Off Swagger-ui in Production: https://www.baeldung.com/swagger-ui-turn-off-in-production
  108. OpenAPI Specification 3.1.0 now available: https://sdtimes.com/api/openapi-specification-3-1-0-now-available/ (JSON Schema, a new top-level element for describing Webhooks, support for identifying API licenses using SPDX identifier; PathItems object now optional, simplifying "reusable component" library creation)
  109. Getting Started with REST Testing in SoapUI: https://www.soapui.org/rest-testing/getting-started.html
  110. Example REST Test in SoapUI : https://www.soapui.org/tutorials/rest-sample-project.html
  111. Google Chrome - 3rd party Advanced Rest Client (ARC) test tool: https://www.advancedrestclient.com/
  112. RECESS former official website: http://www.recessframework.org/ (OFFLINE)
  113. Michal’s PI tips - Exchange Rates from an XML file on a web page – REST, AXIS: https://blogs.sap.com/2012/01/05/michals-pi-tips-exchange-rates-from-an-xml-file-on-a-web-page-rest-axis/ | DEMO (lightweight replacement for old WebserviceX CurrencyConverter)
  114. Fixer: https://fixer.io/quickstart ("EURO" as default base RESTful currency exchange rates)
  115. OpenExchangeRates: https://openexchangerates.org/ | DOCS ("USD" as default base)
  116. Do you really need jQuery: http://www.sitepoint.com/do-you-really-need-jquery/
  117. jQuery - Shorthand AJAX methods: http://api.jquery.com/category/ajax/shorthand-methods/
  118. Calling REST API in Java: https://marketing.adobe.com/developer/blog/calling-rest-api-in-java (Omniture API example)

See Also

API | Web Services | SOAP | SOA | Security | Optimization