External Integration Needs
Hey, I wanted to post about this as I think it's an important point to bring up.
My firm mostly deals with integrations between software applications. Specifically, we've decided to focus on how to integrate Ubercart with SAP Business One and a few other selected back-end systems. This brings up another philosophical issue that should be addressed.
System Integration - Back end Rules
I know I'm going to catch a bit of a debate from this, but Ubercart is not the primary focus of most businesses - especially in the SME space. Here is the deal:
- Few businesses are pure play ecommerce - those that are typically have separate accounting systems / SCM systems / CRM systems that are used in parallel
- The vast majority of business rules are determined by back end software that is not customer facing.
- Most SKU / Product ID systems come from some back-end software.
- Pricing is almost always determined by the capabilities of an accounting system
- Shipping and packaging capabilities are typically determined by warehouse management and logistics centers
- Invoicing and tax requirements are driven by accounting software
- You get the idea...
- Integration is supported by most other major ecommerce packages - especially Magento and Miva. There are a ton of proprietary market solutions too for Quickbooks, SAP, Sage, Netsuite, etc.
- There is a market demand for this - in just casual research Orchestra has found that there are many companies willing to put both time and money into projects that integrate their back end systems to Ubercart.
IMO - this is an essential step for Ubercart to reach the top of the ecommerce pile. Fundamentally, it comes down to the business cases that support Ubercart. Right now, Ubercart is a good ecommerce system, but, speaking from some experience, it's a pain to use the API to integrate with other systems.
So how do we solve this?
My first thought is - a more encompassing API would rock. I have some ideas of what this would entail, and here is why. Most of the ways of connecting with Ubercart fall along these lines:
* Direct database connections
* Web services
Direct DB connections suck because you always stand a chance of really screwing something up. Plus, it requires an underlying knowledge of how the DB operates in order to be effective at doing this. Personally, it's a last resort for us when talking integration.
Web services rock, but just doing request/response stuff is cumbersome. Often an integration needs to do more than just play with data - we actually need access to the underlying objects and functions so we can play around with them. Hence an API. Ubercart has this.
As far as I can tell in my examination of the Ubercart API, it's good, but it's still difficult to work with when we're talking about integration. There are a few reasons for this:
* Lack of true objects for products, carts, orders, customers, etc. in a lot of cases.
* Confusion about the use / application of hooks in many modules (i.e. shipping, packaging, pricing, donations, non-physical goods, etc).
Creation of a robust external API?
Ideally, it would be awesome to have a robust API that could take the place of something like services, features, services, feeds and node import for integration. This is a holy grail, and isn't that well formed in my mind as to what the end product would actually look like.
* So, how do we do this?
* What specifically do other people need? (I've got a lot of info from our devs regarding integration needs, but nothing else really)
* How does this get built / what does it look like?
Some Ideas (Brainstorming)
- Documentation improvements - code examples that are used for illustration and show how to really use the API for good (as opposed to evil). This would have some step-by-step examples that show good coding standards.
- It would rock to have UC services - web services specifically designed for Ubercart
- More accessible functions for the areas where Ubercart is lacking some core functionality (tax, shipping, etc). I don't want to end up replacing modules for UC, but it needs some improvement.
I'm really curious to hear what you guys think.