Directory APIで独自のユーザー検索が可能に!
Google Apps for workにてユーザー検索が便利になったようなので試してみました。
以下の公式にブログにて情報あり
http://googleappsdeveloper.blogspot.jp/2014/09/new-features-in-admin-sdk-custom-user.html
How To
流れとしてはこんな感じです。
- Schema-Fieldを登録(定義)する
- ユーザーに先ほど作成したSchema-Fieldに値をつけて登録する
- ユーザーを検索する
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を指定することになるかと思います。