1533 South Street · Floor One · Philadelphia, PA 19146 · 215.546.6496

SalesForce API - outstanding issues and areas for improvement

I've been working with SalesForce API for about three years now. During that time, I've come to appreciate the breadth and depth of SalesForce's cloud offerings, but I've also run into snags along the way. I'm not the only one who has dealt with these issues, but I've never taken the time to document them. The following issues range from general gripes to specific technical issues.

API Quotas

  • First and foremost, SalesForce's API Quota poses a serious obstacle to high-volume applications backed by SalesForce API. SalesForce allots a certain number of API calls to clients over a rolling 24 hour period. If the client exceeds this number, their API connection is blocked. Folks have implemented workarounds, and the ones I've seen involve complex caching and queuing systems, data replication, and don't support serving live data from the API. I would like to see increased API Quotas across the board, and perhaps a model like Amazon S3, where users can pay for any overages on their quota API service, instead of losing access altogether. Or maybe the numeric API Quota could be replaced with a bandwidth / storage / CPU cycle quota. Presumably this would more accurately serve to throttle abuse of the API. At the very least, the API should expose a method for clients to check their API quota without counting against it.
     
  • Outbound SOAP Messages triggered via SalesForce workflow count against the aforementioned API Quota. Is this true?
     

Enterprise API PHP Client

Feature Requests

  • Given the API Quota as it is, it would be awesome if the SOAP client could create records of different types via upsert and implement a system to upsert a pair or group of master-detail records simultaneously. For example, a transaction for a typical shopping cart application might create an Account, a Contact, an Opportunity, an Opportunity Contact Role, and an Opportunity Product. In addition to the 5 API upserts to create those objects, I need master-detail IDs for the Contact, the Opportunity Contact Role, and the Opportunity Product records - a total of 8 API calls for a single user interaction.
     
  • SalesForce offers a tool to identify and merge duplicate Contact records within an Account, which is great. I would like to see this tool expanded not only to be able to merge Contact records across Accounts, but also to be able to merge records of any type. This functionality is among the offerings of the payware Demand Tools, but I'd like to see it rolled into the base platform.
     
  • Merging Contact records should fire workflow rules for all records involved in the merge - "keeper" AND "merged" records. Merging Contact records through SalesForce's default merge tool only fires Workflow rules for the "keeper" record. For example, if 3 records are being merged, 1 record (the "keeper") will be kept and arbitrary information from the other 2 records (the "merged" records) will be merged with that record. If applicable, "update" Workflow rules for the "keeper" will be fired, but no "update" rules for the "merged" records will be fired, even though the "isDeleted" field will be updated to True for both "merged" records. Conversely, when a record is simply deleted, "update" Workflow rules are fired for the record. This means that instead of SalesForce notifying its clients about such changes, every client will have to continually poll the API for deleted records. Couple this with the API quotas, and you're looking at a huge headache in trying to keep two databases in sync.
     
  • Last on the wishlist: multiple data formats. An API that served different data formats especially JSON, would remove barriers to entry for those who don't wish to consume XML and potentially reduce bandwidth usage.

 

Relevant links: