howdylikes

Google Developersってわかりづらいよね

Directory APIで独自のユーザー検索が可能に!

Google Apps for workにてユーザー検索が便利になったようなので試してみました。

以下の公式にブログにて情報あり
http://googleappsdeveloper.blogspot.jp/2014/09/new-features-in-admin-sdk-custom-user.html

How To

流れとしてはこんな感じです。

  1. Schema-Fieldを登録(定義)する
  2. ユーザーに先ほど作成したSchema-Fieldに値をつけて登録する
  3. ユーザーを検索する

Schemaは情報をグループごとに分けるための枠です。
Fieldは検索の条件となるカスタム属性を定義します。
Fieldは型みたいなもので、ユーザーに登録する際に実際の値を入れる形になります。

Schema-Fieldを登録(定義)する

リファレンス
https://developers.google.com/admin-sdk/directory/v1/reference/schemas/insert?hl=ja
Schemas:insertを使用します。
以下の例はmySchemaというSchema名にSTRINGFieldという文字列のFieldを作成しています。

実行例

customerId : my_customer
Request body

{
 "fields": [
  {
   "fieldName": "STRINGField",
   "fieldType": "STRING",
   "multiValued": false
  }
 ],
 "schemaName": "mySchema"
}

Response

{

 "kind": "admin#directory#schema",
 "schemaId": "V2NUBYuyTSmMLk39SDRAMw==",
 "etag": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/NcvrgASXAS7IZ8SNmUv000SyZX8\"",
 "schemaName": "mySchema",
 "fields": [
  {
   "kind": "admin#directory#schema#fieldspec",
   "fieldId": "P_L9bk2QQIqg-qHfVJCqUA==",
   "etag": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/w5qzvbQLh8QzRb1naZmxmYot1CI\"",
   "fieldType": "STRING",
   "fieldName": "STRINGField",
   "multiValued": false
  }
 ]
}

全部で7種類のFieldTypeがあるようです。
詳細は以下のページに記載されています。
https://developers.google.com/admin-sdk/directory/v1/reference/schemas?hl=ja

ユーザーに先ほど作成したSchema-Fieldを登録する

リファレンス
https://developers.google.com/admin-sdk/directory/v1/reference/users/patch?hl=ja
すでに存在するユーザーに登録する場合は、User:patchを使用します。

実行例

userKey : メールアドレスないしユーザーID
Request Body

{
 "customSchemas": {
  "mySchema": {
   "STRINGField": "hogehoge"
  }
 }
}

Response
※結果が長くなるためFieldsにcustomSchemasを指定して結果を絞っています

{
 "customSchemas": {
  "mySchema": {
   "STRINGField": "hogehoge"
  }
 }
} 

ユーザーを検索する

リファレンス
https://developers.google.com/admin-sdk/directory/v1/reference/users/list?hl=ja
ユーザ一覧を取得するUser:listを使用します。
queryに検索したいFieldと値を指定します。(※URLエンコードする事)
記述方法は以下のページに記載されています。
https://developers.google.com/admin-sdk/directory/v1/guides/search-users?hl=ja

実行例

customFieldMask : mySchema
customer : my_customer
projection : custom
query : mySchema.STRINGField%3Dhogehoge

Response
※結果が長くなるためFieldsを指定して結果を絞っています

{
 "users": [
  {

   "kind": "admin#directory#user",
   "id": "101136005779153122515",
   "etag": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/vPoUujVw6w96lP4vaI_WX2zikX0\"",
   "primaryEmail": "admin@howdylikes.jp",
   "name": {
    "givenName": "Tatsuya",
    "familyName": "Nakano",
    "fullName": "Tatsuya Nakano"
   },
   "isAdmin": true,
   "isDelegatedAdmin": false,
   "lastLoginTime": "2014-09-24T13:03:39.000Z",
   "creationTime": "2013-12-31T00:55:08.000Z",
   "suspended": false,
   "ipWhitelisted": false,
   "emails": [
    {
     "address": "admin@howdylikes.jp",
     "type": "custom",
     "primary": true
    }
   ],
   "orgUnitPath": "/",
   "isMailboxSetup": true,
   "includeInGlobalAddressList": true
  }
 ]
}

customFieldMaskやprojectionに何も指定せずに検索は可能ですが、ResponseにSchemaが表示されないようです。
パターンとしてはprojectionにfullを指定するか、上記の例の様にcustomFieldMaskにSchema、projectionにcustomを指定することになるかと思います。