This document is intended to clarify the Horde Group API. Primarily in order to write a new LDAP driver as discussed by the Bens in IRC, but also to provide a solid target for applications to move toward.
In its simplest terms a group consists of an ID and a Name. The ID is unique to that group and is unchanging. The name is a human-friendly name that can be changed as desired. The source and/or format of the group ID should not be of concern to the application using it, and should always be obtained/modified/stored through the group API calls. The group ID is the only acceptable method as to refer to a group, as it is guaranteed to be unique (uniqueness being the job of the driver). The group name is strictly for interface use.
A group can also have a parent and multiple children. All references to parents and children are to be made through API calls. In particular getParent(), getChildren(), and getParentList(). Again, it is of no concern to the application how these relationships are maintained, but only that they exist and are free to be used.
In order to help keep concepts straight, the following standards should be used