[ 0020 ] fig1 illustrates a computer system on which an embodiment of the present invention is implemented . client computers ( 102 , 104 , 106 ) provide processing and input / output devices in a system providing enterprise applications . server computers ( 110 , 120 ) are also linked to a network 50 and contain software providing application programming interfaces for various backend / database services . enterprise api server 100 provides an enterprise api for users of backend server 120 and database server 110 . the enterprise api can be augmented using api augmentation program 150 . network 50 can be part of the internet , the worldwide collection of computers , networks and gateways that use the tcp / ip suite of protocols to communicate with one another . the internet provides a backbone of high - speed data communication lines between major nodes and host computers , consisting of thousands of commercial , government , educational , and other computer systems , that route data and messages . [ 0021 ] fig2 illustrates the internal structure of a computer of fig1 . fig2 illustrates client computer ( 102 , 104 , 106 ) and the server computers ( 100 , 110 , 120 ). the client computers ( 102 , 104 , 106 ) and server computers ( 100 , 110 , 120 ) contain a system bus 206 ; a bus is a set of hardware lines used for data transfer among the components of a computer system . a bus is essentially a shared channel that connects different parts of the system ( e . g ., processor , disk - drive controller , memory , and input / output ports ) and enables the different parts to transfer information . attached to system bus 206 is display interface 208 , which allows display devices to communicate with other components on system bus 206 . keyboard interface 210 and pointing device interface 212 are also attached to system bus 206 and allow various input devices to communicate with other components on system bus 206 . network interface 214 provides a link to an external network ( e . g ., network 50 ) allowing processes running on a client computer ( 102 , 104 , 106 ) to communicate with a server computer ( 100 , 110 , 120 ) connected to network 50 . enterprise api augmentation program 150 uses enterprise api augmentation data 160 to provide automatically augmented features for component based application programming interfaces according to an embodiment of the present invention . a memory 200 stores computer software instructions ( e . g ., enterprise api augmentation program 150 ) and data structures ( enterprise api augmentation data 160 ) used to implement an embodiment of the present invention for automatically augmenting functionality in an application programming interface . a disk storage device 204 is provided for non - volatile storage on computers ( 102 , 104 , 106 , 100 , 110 , 120 ) to store , for example api augmentation program 150 and enterprise api augmentation data 160 . a processor 202 executes instructions and accesses data stored in memory 200 , allowing the networked computers ( 102 , 104 , 106 , 100 , 110 , 120 ) to provide automatically augmented features for component based application programming interfaces according to an embodiment of the present invention . [ 0023 ] fig3 a is a block diagram showing a non - augmented api component configuration as disclosed in the prior art . application 250 is an enterprise application accessing functionality supplied by component 270 by using api 260 . this a conventional approach and exhibits various problems . whenever the definition of api 260 changes , all components 270 , must be rewritten to comply to the newly defined api . components 270 are often supplied by vendors other than the vendor of api 260 . this makes it more difficult to compel component vendors to comply with the new definition of api 260 . additionally , not only are the component venders often different than the api vendor , but there are often multiple different component vendors . coordinating a new release of api 260 entails convincing all the component vendors to produce rewritten components 270 that comply with the new definition of api 260 , or having the enterprise api vendor write the components themselves . [ 0024 ] fig3 b is a block diagram showing an augmented api component configuration of the present invention . application 250 is again an enterprise application requesting functionality from api 260 . in this configuration components 270 of api 260 are augmented by augmentation component 275 . augmentation component 275 may supply missing functionality for a specific component 270 ( functionality completeness ) or it may provide a common functionality for all components 270 ( functionality enhancement ) of api 260 . the effects of redefining api 260 can now be subsumed by augmentation component 275 . a subset of functionality ( missing functionality ) can be supplied by augmentation component 275 . additionally , common functionality for all components can be supplied by augmentation component 275 . management of augmentation component 275 is accomplished using enterprise api augmentation program 150 . [ 0025 ] fig4 is a block diagram showing computer software elements as configured in an embodiment of the present invention . enterprise applications ( 330 , 332 , 334 ) access data ( 352 , 354 , 356 , 358 ) by way of components ( 302 , 304 , 306 , 308 , 310 , 312 , 314 ) using application programing interface ( 340 ). elements 302 , 304 , 306 , 308 and 310 ( shown as rectangles in fig4 ) represent components . elements 312 and 314 ( shown as rounded - rectangles ) represent augmented components . enterprise applications , for example ibm websphere application 330 , lotus enterprise integrator (“ lei ”) application 332 and domino enterprise connection services (“ decs ”) application 334 allow users to implement enterprise - wide computer solutions . ibm websphere application 330 is a general purpose java application server that can be used to build a wide array of ebusiness applications . websphere provides a robust java execution environment that can be utilized by lotus domino . decs application 334 provides an easy - to - use forms - based interface that lets users integrate connectivity to external data from lotus domino applications . with decs , users work with a non - programmatic template application to make external source data an integrated part of any lotus domino application . lei application 332 is a multi - tasking data distribution server with an administrative application designed to support enterprise scale data integration and transfer volumes . it provides high performance , and scalable exchange of data via lotus domino connectors . enterprise data is stored in various formats on data storage devices ( 352 , 354 , 356 , 358 ). in one preferred embodiment , lotus notes data 356 is accessed by a lotus notes component 306 . the lotus notes component 306 understands how to read and write data in lotus notes format and provides an api for programmatic access to that data . the db2 component 302 accesses data formatted as db2 database records on data storage device 352 . correspondingly , xml and flat file data is stored on data storage device 354 and accessed by xml component 304 and flat file component 310 . these components provide an api for programmatic access to the data formats that they respectively support . the oracle component 308 accesses data formatted as oracle database records on data storage device 358 . enterprise data may be accessed using an enterprise api 340 . enterprise api 340 functions by using underlying components ( 302 , 304 , 306 , 308 , 310 ) to provide features and access the variety of data stored on data storage devices ( 352 , 354 , 356 , 358 ). an example enterprise api 340 is the lotus connector v3 . 0 api . enterprise api 340 requires components to be written to provide some predetermined functionality . the enterprise 340 api defines required entry points and the components implement the set of entry points . in the prior art , a component would not function properly if it did not support the entire set of common functionality defined by the enterprise api 340 . additionally , any required changes to support newly defined functionality of the enterprise api 340 would require rewriting all existing components . the present invention provides for adding functionality to an existing component to complete its ( missing ) functionality such that it supports the predefined enterprise api entry points . this is referred to as “ functionality completeness augmentation ”. the present invention also provides for adding new functionality to all existing components , thereby avoiding the process of upgrading each one . this is referred to as “ functionality enhancement augmentation ”. functionality completeness augmentation using enterprise api augmentation program 150 and enterprise api augmentation data 160 loads an augmentation component when the enterprise api 340 gets a request for functionality from a component identified as missing one or more features required by enterprise api 340 . feature availability is tracked through the use of a “ feature flag ”, a feature flag identifies whether or not a component supports a specific feature . enterprise api augmentation program 150 automatically catalogs all augmentation modules in enterprise api catalog 345 , listing components corresponding to each feature flag . when an augmentation component is found that supports the feature requested , the augmentation component is loaded in order to provide the feature requested . for example , oracle component 308 is used by enterprise api 340 to access oracle data stored on data storage device 358 . in this example , assume that oracle component 308 lacks the features to provide certain data management functionality ( e . g ., “ count of ” database records ). the data management component 314 is an augmentation component supporting data management for oracle data . when an application ( 330 , 332 , 334 ) requests services using enterprise api 340 it may be determined that oracle component 308 does not support data management , but based upon enterprise api catalog 345 entries , it is determined that data management component 314 does support data management for oracle . in this case enterprise api augmentation program 150 loads data management component 314 for enterprise api 340 to satisfy the functionality request made . functionality enhancement augmentation provides enhanced functionality across all components accessible through enterprise api 340 by loading an augmentation component to respond to all requests for a specific common functionality missing from the components . for example , thread management component 312 provides thread management for non - thread safe components . enterprise api augmentation program 150 loads thread management component 312 for enterprise api 340 to satisfy the need for a common thread management implementation . this allows all components to share a commonly required functionality in an efficient way . augmenting enterprise api 340 with a common thread management implementation relieves individual component writers from the burden of providing a new implementation when the definition of enterprise api 340 changes to require thread safe operations . functionality offered by components can change over time as new versions of the components are written and installed . using enterprise api augmentation program 150 new functionality provided by components is automatically recognized and cataloged , thus allowing native implementations of functionality to override augmentation implementations . components may be rewritten to include new functionality and this new functionality will be automatically called . function availability can be determined by using an application function call asking “ do you support this functionality ”. if the function call receives an affirmative response , it is determined that the component does implement the requested functionality . no response , or a negative response provides a determination that the component does not implement the requested functionality . components not implementing a specific functionality are augmented as previously described . [ 0032 ] fig5 is a flowchart of an embodiment of the present invention showing a method of automatically augmenting functionality in an application programming interface . the method starts at step 502 where the enterprise api of the present invention receives a request for functionality . this request for functionality may be in the form of an sql query on an oracle database , for example “{ count of { select name , address , phone where age & gt ; 45 }}”. this query will produce a count of the number of database rows ( result set ) that match the query criteria . it can be the case that not all components of the enterprise api implement the “ count of ” functionality . using the feature flag that associates features with components and the enterprise api catalog 345 , a determination is made as to whether the needed component ( e . g ., oracle component 308 ) implements the requested functionality ( step 504 ). if it is determined that the component does implement the functionality , the component is allowed to respond to the request for functionality ( step 514 ) using its own native implementation . if it is determined that the component does not implement the functionality , a search for an augmentation component ( e . g ., data management component 314 ) is initiated ( step 506 ). the search for augmentation components may occur on multiple locations , including on the server executing the enterprise api ( e . g ., enterprise api server 100 ), on any number of backend servers ( e . g ., backend server 120 , database server 110 ), or on web sites of various component vendors ( e . g ., www . oracle . com ). if an appropriate augmentation component is not found ( step 508 ), a “ not found ” flag is set ( step 510 ) such that the requestor is notified of the unavailability of the requested functionality . otherwise , if an appropriate augmentation component is found ( step 508 ), the augmentation component is dynamically loaded ( step 512 ). the augmentation component is then used to respond to the request for functionality ( step 514 ), thus automatically augmenting features for component based application programming interfaces . while this invention has been particularly shown and described with references to preferred embodiments thereof , it will be understood by those skilled in the art that various changes in form and details may be made therein without departing from the scope of the invention encompassed by the appended claims . applications have been described as enterprise applications , typically running on a client - server architecture . the present invention applies to augmenting apis in any computer architecture including client - server , peer to peer and standalone applications . additionally , the application need not be an enterprise application , the present invention applies to all applications accessing functionality through an application programming interface . for example , in a client - server architecture a memory 200 in a server computer stores computer software instructions ( e . g ., enterprise api augmentation program 150 ) and data structures ( enterprise api augmentation data 160 ) used to implement an embodiment of the present invention . in a peer to peer architecture enterprise api augmentation program 150 and enterprise api augmentation data 160 may be stored in a memory 200 on various computers within the peer to peer network . in a standalone architecture a memory 200 in the standalone computer stores computer software instructions ( e . g ., enterprise api augmentation program 150 ) and data structures ( enterprise api augmentation data 160 ) used to implement an embodiment of the present invention .