Google Apps es un servicio que permite a los administradores de dominio ofrecer a sus usuarios acceso gestionado a servicios de Google como Mail, Calendar, y Docs & Spreadsheets. La API de Provisioning ofrece una interfaz programática para configurar este servicio. En concreto, esta API permite a los administradores crear, obtener, actualizar y eliminar cuentas de usuario, apodos, grupos y listas de correo.
Esta librería implementa la versión 2.0 de la API de Provisioning. El acceso a su cuenta a través de la API de Provisioning debe habilitarse manualmente para cada dominio mediante el panel de control de Google Apps. Solo ciertos tipos de cuenta pueden habilitar esta característica.
Para más información sobre la API de Google Apps Provisioning, incluyendo instrucciones para habilitar el acceso a la API, consulte la Referencia de la API V2.0 de Provisioning.
![]() |
Autenticación |
|---|---|
La API de Provisioning no admite autenticación mediante AuthSub y no se permite el acceso anónimo. Todas las conexiones HTTP deben autenticarse usando autenticación ClientAuth. |
Para usar la API de Provisioning, el dominio que se administra debe especificarse en todas las URIs de las peticiones. Para facilitar el desarrollo, esta información se almacena tanto en las clases de servicio como de consulta de Gapps para usarla al construir las peticiones.
Para establecer el dominio de las peticiones realizadas por la clase de servicio,
llame a setDomain() o especifique el dominio
al instanciar la clase de servicio. Por ejemplo:
$domain = "example.com"; $gdata = new Zend_Gdata_Gapps($client, $domain);
Establecer el dominio para las peticiones realizadas por las clases de consulta es
similar a establecerlo para la clase de servicio: llame a
setDomain() o especifique el dominio al crear
la consulta. Por ejemplo:
$domain = "example.com"; $query = new Zend_Gdata_Gapps_UserQuery($domain, $arg);
Cuando se usa un método de fábrica de la clase de servicio para crear una consulta, la clase de servicio establecerá automáticamente el dominio de la consulta para que coincida con el suyo propio. Como resultado, no es necesario especificar el dominio como parte de los argumentos del constructor.
$domain = "example.com"; $gdata = new Zend_Gdata_Gapps($client, $domain); $query = $gdata->newUserQuery($arg);
Cada cuenta de usuario en un dominio alojado en Google Apps se representa como
una instancia de Zend_Gdata_Gapps_UserEntry. Esta clase proporciona
acceso a todas las propiedades de la cuenta, incluyendo nombre, nombre de usuario,
contraseña, derechos de acceso y cuota actual.
Las cuentas de usuario se pueden crear llamando al
método de conveniencia createUser():
$gdata->createUser('foo', 'Random', 'User', '••••••••');
Los usuarios también se pueden crear instanciando UserEntry,
proporcionando un nombre de usuario, nombre, apellido y contraseña,
y luego llamando a insertUser() sobre un objeto de servicio para
subir la entrada al servidor.
$user = $gdata->newUserEntry(); $user->login = $gdata->newLogin(); $user->login->username = 'foo'; $user->login->password = '••••••••'; $user->name = $gdata->newName(); $user->name->givenName = 'Random'; $user->name->familyName = 'User'; $user = $gdata->insertUser($user);
La contraseña del usuario normalmente debe proporcionarse en texto plano. Opcionalmente, la contraseña se puede proporcionar como un resumen SHA-1 si login->passwordHashFunction se establece a 'SHA-1'.
Las cuentas de usuario individuales se pueden obtener llamando al
método de conveniencia retrieveUser(). Si el usuario
no se encuentra, se devolverá NULL.
$user = $gdata->retrieveUser('foo');
echo 'Username: ' . $user->login->userName . "\n";
echo 'Given Name: ' . $user->name->givenName . "\n";
echo 'Family Name: ' . $user->name->familyName . "\n";
echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'Must Change Password: ' .
($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo 'Has Agreed To Terms: ' .
($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
Los usuarios también se pueden obtener creando una
instancia de Zend_Gdata_Gapps_UserQuery, estableciendo su propiedad
username para que coincida con el nombre de usuario del usuario que se desea
obtener, y llamando a getUserEntry() sobre un
objeto de servicio con esa consulta.
$query = $gdata->newUserQuery('foo');
$user = $gdata->getUserEntry($query);
echo 'Username: ' . $user->login->userName . "\n";
echo 'Given Name: ' . $user->login->givenName . "\n";
echo 'Family Name: ' . $user->login->familyName . "\n";
echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
echo 'Must Change Password: ' .
($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
echo 'Has Agreed To Terms: ' .
($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
Si no se puede localizar el usuario especificado, se lanzará una ServiceException
con un código de error
Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST.
Las ServiceExceptions se tratarán en el capítulo de excepciones.
Para obtener todos los usuarios de un dominio, llame al
método de conveniencia retrieveAllUsers().
$feed = $gdata->retrieveAllUsers();
foreach ($feed as $user) {
echo " * " . $user->login->username . ' (' . $user->name->givenName .
' ' . $user->name->familyName . ")\n";
}
Esto creará un objeto Zend_Gdata_Gapps_UserFeed que
contiene cada usuario del dominio.
Alternativamente, llame a getUserFeed() sin
opciones. Tenga en cuenta que en dominios más grandes
este feed puede estar paginado por el servidor. Para más
información sobre paginación, consulte el capítulo de paginación.
$feed = $gdata->getUserFeed();
foreach ($feed as $user) {
echo " * " . $user->login->username . ' (' . $user->name->givenName .
' ' . $user->name->familyName . ")\n";
}
La forma más sencilla de actualizar una cuenta de usuario es obtener el
usuario tal como se describe en las secciones anteriores, realizar los cambios
deseados y luego llamar a save() sobre ese usuario. Cualquier
cambio realizado se propagará al servidor.
$user = $gdata->retrieveUser('foo');
$user->name->givenName = 'Foo';
$user->name->familyName = 'Bar';
$user = $user->save();
La contraseña de un usuario se puede restablecer a un nuevo valor actualizando la propiedad login->password.
$user = $gdata->retrieveUser('foo');
$user->login->password = '••••••••';
$user = $user->save();
Tenga en cuenta que no es posible recuperar una contraseña de esta manera, ya que las contraseñas almacenadas no se ponen a disposición mediante la API de Provisioning por motivos de seguridad.
Se puede obligar a un usuario a cambiar su contraseña en su
próximo inicio de sesión estableciendo la propiedad
login->changePasswordAtNextLogin a
TRUE.
$user = $gdata->retrieveUser('foo');
$user->login->changePasswordAtNextLogin = true;
$user = $user->save();
De igual manera, esto se puede deshacer estableciendo la propiedad
login->changePasswordAtNextLogin a
FALSE.
Se puede restringir a los usuarios el inicio de sesión sin eliminar
su cuenta de usuario, en su lugar
suspendiendo su cuenta de usuario.
Las cuentas se pueden suspender o restaurar usando los
métodos de conveniencia suspendUser() y
restoreUser():
$gdata->suspendUser('foo');
$gdata->restoreUser('foo');
Alternativamente, puede establecer la propiedad
login->suspended de UserEntry a
TRUE.
$user = $gdata->retrieveUser('foo');
$user->login->suspended = true;
$user = $user->save();
Para restaurar el acceso del usuario, establezca la propiedad
login->suspended a
FALSE.
A los usuarios se les puede conceder la capacidad de administrar su dominio
estableciendo su propiedad login->admin a
TRUE.
$user = $gdata->retrieveUser('foo');
$user->login->admin = true;
$user = $user->save();
Y, como cabría esperar, establecer la propiedad login->admin
de un usuario a FALSE revoca sus
derechos administrativos.
Eliminar una cuenta de usuario para la que ya se dispone de un UserEntry
es tan sencillo como llamar a delete() sobre esa
entrada.
$user = $gdata->retrieveUser('foo');
$user->delete();
Si no se dispone de acceso a un objeto UserEntry para una
cuenta, use el método de conveniencia deleteUser().
$gdata->deleteUser('foo');
Los apodos sirven como alias de correo electrónico para usuarios existentes. Cada apodo contiene exactamente dos propiedades clave: su nombre y su propietario. Cualquier correo dirigido a un apodo se reenvía al usuario propietario de ese apodo.
Los apodos se representan como instancias de
Zend_Gdata_Gapps_NicknameEntry.
Los apodos se pueden crear llamando al
método de conveniencia createNickname():
$gdata->createNickname('foo', 'bar');
Los apodos también se pueden crear instanciando NicknameEntry,
proporcionando al apodo un nombre y un propietario, y luego llamando
a insertNickname() sobre un objeto de servicio para subir
la entrada al servidor.
$nickname = $gdata->newNicknameEntry();
$nickname->login = $gdata->newLogin('foo');
$nickname->nickname = $gdata->newNickname('bar');
$nickname = $gdata->insertNickname($nickname);
Los apodos se pueden obtener llamando al
método de conveniencia retrieveNickname(). Esto
devolverá NULL si no se encuentra un usuario.
$nickname = $gdata->retrieveNickname('bar');
echo 'Nickname: ' . $nickname->nickname->name . "\n";
echo 'Owner: ' . $nickname->login->username . "\n";
Los apodos individuales también se pueden obtener creando una
instancia de Zend_Gdata_Gapps_NicknameQuery, estableciendo su
propiedad nickname para que coincida con el apodo que se desea
obtener, y llamando a getNicknameEntry() sobre un
objeto de servicio con esa consulta.
$query = $gdata->newNicknameQuery('bar');
$nickname = $gdata->getNicknameEntry($query);
echo 'Nickname: ' . $nickname->nickname->name . "\n";
echo 'Owner: ' . $nickname->login->username . "\n";
Al igual que con los usuarios, si no se encuentra ningún apodo correspondiente se
lanzará una ServiceException con un código de error
Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST. De nuevo, esto
se tratará en el capítulo de excepciones.
Para obtener todos los apodos asociados a un usuario determinado, llame
al método de conveniencia retrieveNicknames().
$feed = $gdata->retrieveNicknames('foo');
foreach ($feed as $nickname) {
echo ' * ' . $nickname->nickname->name . "\n";
}
Esto creará un objeto Zend_Gdata_Gapps_NicknameFeed que
contiene cada apodo asociado al usuario especificado.
Alternativamente, cree un nuevo Zend_Gdata_Gapps_NicknameQuery,
establezca su propiedad username al usuario deseado, y envíe la
consulta llamando a getNicknameFeed() sobre un servicio
objeto.
$query = $gdata->newNicknameQuery();
$query->setUsername('foo');
$feed = $gdata->getNicknameFeed($query);
foreach ($feed as $nickname) {
echo ' * ' . $nickname->nickname->name . "\n";
}
Para obtener todos los apodos en un feed, simplemente llame al
método de conveniencia retrieveAllNicknames()
$feed = $gdata->retrieveAllNicknames();
foreach ($feed as $nickname) {
echo ' * ' . $nickname->nickname->name . ' => ' .
$nickname->login->username . "\n";
}
Esto creará un objeto Zend_Gdata_Gapps_NicknameFeed que
contiene cada apodo del dominio.
Alternativamente, llame a getNicknameFeed() sobre un
objeto de servicio sin argumentos.
$feed = $gdata->getNicknameFeed();
foreach ($feed as $nickname) {
echo ' * ' . $nickname->nickname->name . ' => ' .
$nickname->login->username . "\n";
}
Eliminar un apodo para el que ya se dispone de un NicknameEntry
es tan sencillo como llamar a delete() sobre esa
entrada.
$nickname = $gdata->retrieveNickname('bar');
$nickname->delete();
Para los apodos de los que no se dispone de un NicknameEntry, use
el método de conveniencia deleteNickname().
$gdata->deleteNickname('bar');
Google Groups permite a las personas publicar mensajes como en una lista de correo. Google está desaprobando la API Email List. Google Groups ofrece algunas características interesantes como grupos anidados y propietarios de grupos. Si desea iniciar una nueva lista de correo, es recomendable usar Google Groups en su lugar. El Email List de Google no es compatible con Google Groups. Así que si crea una lista de correo, no aparecerá como un grupo. Lo contrario también es cierto.
Cada grupo de un dominio se representa como una instancia de
Zend_Gdata_Gapps_GroupEntry.
Los grupos se pueden crear llamando al
método de conveniencia createGroup():
$gdata->createGroup('friends', 'The Friends Group');
Los grupos también se pueden crear instanciando
GroupEntry, proporcionando un id de grupo y un nombre para el grupo,
y luego llamando a insertGroup() sobre un objeto
de servicio para subir la entrada al servidor.
$group = $gdata->newGroupEntry(); $properties[0] = $this->newProperty(); $properties[0]->name = 'groupId'; $properties[0]->value = 'friends'; $properties[1] = $this->newProperty(); $properties[1]->name = 'groupName'; $properties[1]->value = 'The Friends Group'; $group->property = $properties; $group = $gdata->insertGroup($group);
Para obtener un grupo individual, llame al
método de conveniencia retrieveGroup():
$entry = $gdata->retrieveGroup('friends');
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
Esto creará un objeto Zend_Gdata_Gapps_GroupEntry
que contiene las propiedades sobre el grupo.
Alternativamente, cree un nuevo Zend_Gdata_Gapps_GroupQuery,
establezca su propiedad groupId al id de grupo deseado, y
envíe la consulta llamando a getGroupEntry()
sobre un objeto de servicio.
$query = $gdata->newGroupQuery();
$query->setGroupId('friends');
$entry = $gdata->getGroupEntry($query);
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
Para obtener todos los grupos de un dominio, llame al método
de conveniencia retrieveAllGroups().
$feed = $gdata->retrieveAllGroups();
foreach ($feed->entry as $entry) {
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
echo "\n\n";
}
Esto creará un objeto Zend_Gdata_Gapps_GroupFeed
que contiene cada grupo del dominio.
Alternativamente, llame a getGroupFeed() sobre un
objeto de servicio sin argumentos.
$feed = $gdata->getGroupFeed();
foreach ($feed->entry as $entry) {
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
echo "\n\n";
}
Para eliminar un grupo, llame al método de conveniencia deleteGroup():
$gdata->deleteGroup('friends');
Los grupos se pueden actualizar llamando al
método de conveniencia updateGroup():
$gdata->updateGroup('group-id-here', 'Group Name Here');
El primer parámetro es obligatorio. El segundo, tercer y cuarto parámetro, que representan el nombre del grupo, la descripción del grupo y el permiso de correo, respectivamente, son opcionales. Establecer cualquiera de estos parámetros opcionales a null no actualizará ese elemento.
Para obtener todos los grupos de los que una persona en particular es
miembro, llame al método de conveniencia
retrieveGroups():
$feed = $gdata->retrieveGroups('baz@somewhere.com');
foreach ($feed->entry as $entry) {
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
echo "\n\n";
}
Esto creará un objeto Zend_Gdata_Gapps_GroupFeed
que contiene cada grupo asociado al miembro especificado.
Alternativamente, cree un nuevo Zend_Gdata_Gapps_GroupQuery,
establezca su propiedad member a la dirección de correo deseada, y
envíe la consulta llamando a getGroupFeed()
sobre un objeto de servicio.
$query = $gdata->newGroupQuery();
$query->setMember('baz@somewhere.com');
$feed = $gdata->getGroupFeed($query);
foreach ($feed->entry as $entry) {
foreach ($entry->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
echo "\n\n";
}
Cada miembro suscrito a un grupo se representa mediante una
instancia de Zend_Gdata_Gapps_MemberEntry.
A través de esta clase, se pueden añadir y eliminar destinatarios individuales
de los grupos.
Para añadir un miembro a un grupo, simplemente llame al
método de conveniencia addMemberToGroup():
$gdata->addMemberToGroup('bar@somewhere.com', 'friends');
Para comprobar si un miembro pertenece a un grupo, simplemente llame al
método de conveniencia isMember():
$isMember = $gdata->isMember('bar@somewhere.com', 'friends');
var_dump($isMember);
El método devuelve un valor booleano. Si el miembro pertenece al grupo especificado, el método devuelve true; en caso contrario, devuelve false.
Para eliminar un miembro de un grupo, llame al
método de conveniencia removeMemberFromGroup():
$gdata->removeMemberFromGroup('baz', 'friends');
El método de conveniencia retrieveAllMembers()
se puede usar para obtener la lista de miembros de un grupo:
$feed = $gdata->retrieveAllMembers('friends');
foreach ($feed as $member) {
foreach ($member->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
}
Alternativamente, construya un nuevo MemberQuery, establezca su propiedad
groupId para que coincida con el id de grupo deseado, y llame
a getMemberFeed() sobre un objeto de servicio.
$query = $gdata->newMemberQuery();
$query->setGroupId('friends');
$feed = $gdata->getMemberFeed($query);
foreach ($feed as $member) {
foreach ($member->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
}
Esto creará un objeto Zend_Gdata_Gapps_MemberFeed
que contiene cada miembro del grupo seleccionado.
Cada propietario asociado a un grupo se representa mediante una
instancia de Zend_Gdata_Gapps_OwnerEntry.
A través de esta clase, se pueden añadir y eliminar propietarios individuales
de los grupos.
Para añadir un propietario a un grupo, simplemente llame al
método de conveniencia addOwnerToGroup():
$gdata->addOwnerToGroup('bar@somewhere.com', 'friends');
El método de conveniencia retrieveGroupOwners()
se puede usar para obtener la lista de propietarios de un grupo:
$feed = $gdata->retrieveGroupOwners('friends');
foreach ($feed as $owner) {
foreach ($owner->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
}
Alternativamente, construya un nuevo OwnerQuery, establezca su propiedad
groupId para que coincida con el id de grupo deseado, y llame
a getOwnerFeed() sobre un objeto de servicio.
$query = $gdata->newOwnerQuery();
$query->setGroupId('friends');
$feed = $gdata->getOwnerFeed($query);
foreach ($feed as $owner) {
foreach ($owner->property as $p) {
echo "Property Name: " . $p->name;
echo "\nProperty Value: " . $p->value . "\n\n";
}
}
Esto creará un objeto Zend_Gdata_Gapps_OwnerFeed
que contiene cada miembro del grupo seleccionado.
Para comprobar si un correo es el propietario de un grupo, simplemente llame
al método de conveniencia isOwner():
$isOwner = $gdata->isOwner('bar@somewhere.com', 'friends');
var_dump($isOwner);
El método devuelve un valor booleano. Si el correo es el propietario de el grupo especificado, el método devuelve true; en caso contrario, devuelve false.
Las listas de correo permiten a varios usuarios recibir el correo dirigido a una única dirección de correo. Los usuarios no necesitan ser miembros de este dominio para suscribirse a una lista de correo, siempre que se use su dirección de correo completa (incluyendo el dominio).
Cada lista de correo de un dominio se representa como una instancia de
Zend_Gdata_Gapps_EmailListEntry.
Las listas de correo se pueden crear llamando al
método de conveniencia createEmailList():
$gdata->createEmailList('friends');
Las listas de correo también se pueden crear instanciando
EmailListEntry, proporcionando un nombre para la lista, y luego llamando
a insertEmailList() sobre un objeto de servicio para subir
la entrada al servidor.
$list = $gdata->newEmailListEntry();
$list->emailList = $gdata->newEmailList('friends');
$list = $gdata->insertEmailList($list);
Para obtener todas las listas de correo a las que un destinatario particular está
suscrito, llame al método de conveniencia retrieveEmailLists():
$feed = $gdata->retrieveEmailLists('baz@somewhere.com');
foreach ($feed as $list) {
echo ' * ' . $list->emailList->name . "\n";
}
Esto creará un objeto Zend_Gdata_Gapps_EmailListFeed
que contiene cada lista de correo asociada al destinatario especificado.
Alternativamente, cree un nuevo Zend_Gdata_Gapps_EmailListQuery,
establezca su propiedad recipient a la dirección de correo deseada, y
envíe la consulta llamando a getEmailListFeed() sobre
un objeto de servicio.
$query = $gdata->newEmailListQuery();
$query->setRecipient('baz@somewhere.com');
$feed = $gdata->getEmailListFeed($query);
foreach ($feed as $list) {
echo ' * ' . $list->emailList->name . "\n";
}
Para obtener todas las listas de correo de un dominio, llame al método
de conveniencia retrieveAllEmailLists().
$feed = $gdata->retrieveAllEmailLists();
foreach ($feed as $list) {
echo ' * ' . $list->emailList->name . "\n";
}
Esto creará un objeto Zend_Gdata_Gapps_EmailListFeed
que contiene cada lista de correo del dominio.
Alternativamente, llame a getEmailListFeed() sobre un
objeto de servicio sin argumentos.
$feed = $gdata->getEmailListFeed();
foreach ($feed as $list) {
echo ' * ' . $list->emailList->name . "\n";
}
Cada destinatario suscrito a una lista de correo se representa mediante una
instancia de Zend_Gdata_Gapps_EmailListRecipient. A través de esta
clase, se pueden añadir y eliminar destinatarios individuales de las listas de
correo.
Para añadir un destinatario a una lista de correo, simplemente llame al
método de conveniencia addRecipientToEmailList():
$gdata->addRecipientToEmailList('bar@somewhere.com', 'friends');
El método de conveniencia retrieveAllRecipients()
se puede usar para obtener la lista de suscriptores de una lista de correo:
$feed = $gdata->retrieveAllRecipients('friends');
foreach ($feed as $recipient) {
echo ' * ' . $recipient->who->email . "\n";
}
Alternativamente, construya un nuevo EmailListRecipientQuery, establezca
su propiedad emailListName para que coincida con la lista de correo deseada,
y llame a getEmailListRecipientFeed() sobre un objeto
de servicio.
$query = $gdata->newEmailListRecipientQuery();
$query->setEmailListName('friends');
$feed = $gdata->getEmailListRecipientFeed($query);
foreach ($feed as $recipient) {
echo ' * ' . $recipient->who->email . "\n";
}
Esto creará un objeto Zend_Gdata_Gapps_EmailListRecipientFeed
que contiene cada destinatario de la lista de correo seleccionada.
Además del conjunto estándar de excepciones lanzadas por
Zend_Gdata, las peticiones que usan la API de
Provisioning también pueden lanzar una
Zend_Gdata_Gapps_ServiceException. Estas excepciones
indican que se produjo un error específico de la API que impide que la
petición se complete.
Cada instancia de ServiceException puede contener uno o más objetos Error.
Cada uno de estos objetos contiene un código de error, un motivo y
(opcionalmente) la entrada que provocó la excepción. En la documentación
de la API de Zend Framework, bajo Zend_Gdata_Gapps_Error, se
proporciona una lista completa de los códigos de error conocidos. Además, la
lista de errores autorizada está disponible en línea en Google
Apps Provisioning API V2.0 Reference: Appendix D.
Aunque la lista completa de errores recibidos está disponible dentro de
ServiceException como un array llamando a getErrors(),
a menudo resulta conveniente saber si ocurrió un error específico concreto. Para
estos casos, la presencia de un error se puede determinar llamando a
hasError().
El siguiente ejemplo muestra cómo detectar si un recurso solicitado no existe y gestionar el fallo con elegancia:
function retrieveUser ($username) {
$query = $gdata->newUserQuery($username);
try {
$user = $gdata->getUserEntry($query);
} catch (Zend_Gdata_Gapps_ServiceException $e) {
// Set the user to null if not found
if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
$user = null;
} else {
throw $e;
}
}
return $user;
}
![[Note]](images/note.png)