Working with group data¶
You can organize app users into groups. Groups have their own Activity Feed, their own permissions and be a useful alternative to Roles, depending on how you model your data. Groups were originally designed to emulate Facebook Groups, so they will tend to function about the same way Facebook Groups would.
Groups are hierarchical. Every member of the group
/groups/california/san-francisco
is also a member of the group
/groups/california
.
Groups are also a great way to model things such a topic subscriptions.
For example, you could allow people to subscribe (i.e. become a member
of the group and be alerted via Activities) to
/groups/memes/dogs/doge
or subscribe to all /groups/memes/dogs
.
See the Group Model section of the API Reference for a list of the system-defined properties for group entities. In addition, you can create group properties specific to your application.
Creating groups¶
A group entity represents an application group of users. You can create, retrieve, update, delete, and query group entities. See User entity properties for a list of the system-defined properties for group entities. In addition, you can create group properties specific to your application.
Request Syntax¶
curl -X POST "https://api.usergrid.com/your-org/your-app/groups" '{ request body }'
Use the POST method to create a new group. Groups use paths to indicate their unique names. This allows you to create group hierarchies by using slashes. For this reason, you need to specify a path property for a new group.
Request URI¶
POST /{org_id}/{app_id}/groups
Parameters
Parameter | Description |
---|---|
uuid | org_id | Organization UUID or organization name |
uuid | app_id | Application UUID or application name |
request body | One or more sets of group properties of which path is mandatory. |
The path
property is required and must be unique, it may include
forward slashes to denote hierarchical relationships.
{
"path" : "somegroup/somesubgroup",
"title" : "Some SubGroup"
}
Example¶
Note: Although not shown in the API examples below, you need to provide a valid access token with each API call. See Authenticating users and application clients for details.
Request¶
curl -X POST "https://api.usergrid.com/my-org/my-app/groups" -d '{"path":"mynewgroup"}'
Response¶
{
"action": "post",
"application": "7fb8d891-477d-11e1-b2bd-22000a1c4e22",
"params": {},
"path": "/groups",
"uri": "https://api.usergrid.com/22000a1c4e22-7fb8d891-477d-11e1-b2bd/7fb8d891-477d-11e1-b2bd-22000a1c4e22/groups",
"entities": [{
"uuid": "a668717b-67cb-11e1-8223-12313d14bde7",
"type": "group",
"created": 1331066016571,
"modified": 1331066016571,
"metadata": {
"path": "/groups/a668717b-67cb-11e1-8223-12313d14bde7",
"sets": {
"rolenames": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/rolenames",
"permissions": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/permissions"
},
"collections": {
"activities": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/activities",
"feed": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/feed",
"roles": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/roles",
"users": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users"
}
},
"path": "mynewgroup"
}],
"timestamp": 1331066016563,
"duration": 35,
"organization": "my-org",
"applicationName": "my-app"
}
Retrieving groups¶
Retrieving group data
You can retrieve data about groups through cURL or one of the SDKs. Each provides a way to filter the list of groups by data associated with the group, such as title or path, or other properties in the group entity.
See the Group Model section of the API Reference for a list of the system-defined properties for group entities. In addition, you can create group properties specific to your application.
Request Syntax¶
curl -X GET "https://api.usergrid.com/my-org/my-app/groups/mynewgroup"
Use the GET method to retrieve group data.
Request URI¶
GET /<org_id | uuid>/<app_id | uuid>/groups</groupPath | uuid> | <?ql=query_string>
Parameters
Parameter Description¶
org_id | uuid Organization UUID or organization name app_id | uuid Application UUID or application name groupPath | uuid Group UUID or group path, which must be unique. query_string A data store query. For more on queries, see Data queries.
Request¶
# Get a group by the group path, "employees/managers".
curl -X GET "https://api.usergrid.com/my-org/my-app/groups/employees/managers"
# Get a group by UUID.
curl -X GET "https://api.usergrid.com/my-org/my-app/groups/a407b1e7-58e8-11e1-ac46-22000a1c5a67e"
# Get group data filtering by their title.
curl -X GET "https://api.usergrid.com/my-org/my-app/groups?ql=select%20*%20where%20title%3D'Management%20Employees'"
Response¶
The following is an example of JSON returned by a query for a single group.
{
"action" : "get",
"application" : "db1e60a0-417f-11e3-9586-0f1ff3650d20",
"params" : { },
"path" : "/groups",
"uri" : "https://api.usergrid.com/steventraut/mynewapp/groups",
"entities" : [ {
"uuid" : "5005a0fa-6916-11e3-9c1b-b77ec8addc0d",
"type" : "group",
"created" : 1387503030399,
"modified" : 1387503030399,
"path" : "managers",
"metadata" : {
"path" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d",
"sets" : {
"rolenames" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/roles",
"permissions" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/permissions"
},
"collections" : {
"activities" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/activities",
"feed" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/feed",
"roles" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/roles",
"users" : "/groups/5005a0fa-6916-11e3-9c1b-b77ec8addc0d/users"
}
},
"title" : "Management Employees"
} ],
"timestamp" : 1391020491701,
"duration" : 15,
"organization" : "my-org",
"applicationName" : "my-app"
}
Retrieving a group’s users¶
Use the GET method to retrieve all the users in a group.
Request URI¶
GET /{org_id}/{app_id}/groups/{uuid|groupname}/users
Parameters¶
Parameter | Description |
---|---|
arg uuid|string org_id | Organization UUID or organization name |
arg uuid|string app_id | Application UUID or application name |
arg uuid|string groupname | UUID or name of the group |
Example - Request¶
curl -X GET "https://api.usergrid.com/my-org/my-app/groups/mygroup/users"
Example - Response¶
{
"action" : "get",
"application" : "e7127751-6985-11e2-8078-02e81aeb2129",
"params" : { },
"path" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users",
"uri" : "http://api.usergrid.com/myorg/sandbox/groups/d20976ff-802f-11e2-b690-02e81ae61238/users",
"entities" : [ {
"uuid" : "cd789b00-698b-11e2-a6e3-02e81ae236e9",
"type" : "user",
"name" : "barney",
"created" : 1359405994314,
"modified" : 1361894320470,
"activated" : true,
"email" : "barney@apigee.com",
"metadata" : {
"path" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9",
"sets" : {
"rolenames" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/rolenames",
"permissions" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/permissions"
},
"collections" : {
"activities" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/activities",
"devices" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/devices",
"feed" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/feed",
"groups" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/groups",
"roles" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/roles",
"following" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/following",
"followers" : "/groups/d20976ff-802f-11e2-b690-02e81ae66238/users/cd789b00-698b-11e2-a6e3-02e81aeb26e9/followers"
}
},
"name" : "barney",
"picture" : "http://www.gravatar.com/avatar/00767101f6b4f2cf5d02ed510dbcf0b4",
"test" : "fred",
"username" : "barney"
} ],
"timestamp" : 1361903248398,
"duration" : 24,
"organization" : "myorg",
"applicationName" : "sandbox"
}
Deleting a group¶
To delete a group, delete the associated group entity as you would any other entity. Note that this will only delete the group. Any entities in the group will be preserved.
For more information and code samples, see Deleting Data Entities.
Adding a user to a group¶
You can add users to groups from client code using cURL commands or one of the SDKs, as described here.
When setting up your application on the server, you might find it easier and more convenient to create and populate groups with the admin portal. There, you can create groups, create roles, and define permission rules that govern user access to data and services in your application. For more information, see Security & Token Authentication.
Use the POST method to add a user to a group. If the named group does not yet exist, an error message is returned.
Request syntax¶
curl -X POST https://api.usergrid.com/<org_id>/<app_id>/groups/<uuid | groupname>/users/<uuid | username>
Request URI¶
POST /<org_id>/<app_id>/groups/<uuid | groupname>/users/<uuid | username>
Parameters
Parameter | Description |
---|---|
arg uuid | string org_id | Organization UUID or organization name |
arg uuid | string app_id | Application UUID or application name |
arg uuid | string groupname | UUID or name of the group |
arg uuid | string username | UUID or username of user |
Example¶
Note: Although not shown in the API examples below, you need to provide a valid access token with each API call. See Authenticating users and application clients for details.
Request¶
curl -X POST "https://api.usergrid.com/my-org/my-app/groups/mynewgroup/users/john.doe"
Response¶
{
"action": "post",
"application": "7fb8d891-477d-11e1-b2bd-22000a1c4e22",
"params": {},
"path": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users",
"uri": "https://api.usergrid.com/22000a1c4e22-7fb8d891-477d-11e1-b2bd/7fb8d891-477d-11e1-b2bd-22000a1c4e22/groups/a668717b-67cb-11e1-8223-12313d14bde7/users",
"entities": [{
"uuid": "6fbc8157-4786-11e1-b2bd-22000a1c4e22",
"type": "user",
"name": "John Doe",
"created": 1327517852364015,
"modified": 1327517852364015,
"activated": true,
"email": "john.doe@mail.com",
"metadata": {
"connecting": {
"owners":"/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/connecting/owners"
},
"path": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22",
"sets": {
"rolenames": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/rolenames",
"permissions": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/permissions"
},
"collections":{
"activities":"/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/activities",
"devices": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/devices",
"feed":"/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/feed",
"groups": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/groups",
"roles":"/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/roles",
"following": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/following",
"followers": "/groups/a668717b-67cb-11e1-8223-12313d14bde7/users/6fbc8157-4786-11e1-b2bd-22000a1c4e22/followers"
}
},
"picture": "https://www.gravatar.com/avatar/90f823ba15655b8cc8e3b4d63377576f",
"username": "john.doe"
}],
"timestamp": 1331066031380,
"duration": 64,
"organization" : "my-org",
"applicationName": "my-app"
}
Removing a user from a group¶
Use the DELETE method to remove a user from the specified group.
Request syntax¶
curl -X DELETE https://api.usergrid.com/<org>/<app>/groups/<group>/users/<user>"
Parameters
Parameter | Description |
---|---|
org | Organization UUID or organization name |
app | Application UUID or application name |
group | UUID or name of the group |
user | UUID, username or email of user to be deleted |
Example request¶
curl -X DELETE https://api.usergrid.com/your-org/your-app/groups/someGroup/users/someUser
Example response¶
{
"action" : "delete",
"application" : "f34f4222-a166-11e2-a7f7-02e81adcf3d0",
"params" : { },
"path" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users",
"uri" : "https://api.usergrid.com/your-org/your-app/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users",
"entities" : [ {
"uuid" : "74d2d7da-e694-11e3-b0c6-4d2664c8e0c3",
"type" : "user",
"name" : "someUser",
"created" : 1401301104077,
"modified" : 1401301104077,
"username" : "someUser",
"email" : "your-org@apigee.com",
"activated" : true,
"picture" : "http://www.gravatar.com/avatar/0455fc92de2636fc7a176cc5d298bb78",
"metadata" : {
"path" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3",
"sets" : {
"rolenames" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/roles",
"permissions" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/permissions"
},
"collections" : {
"activities" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/activities",
"devices" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/devices",
"feed" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/feed",
"groups" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/groups",
"roles" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/roles",
"following" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/following",
"followers" : "/groups/cd796d0a-b90c-11e3-83de-83ceb9965c26/users/74d2d7da-e694-11e3-b0c6-4d2664c8e0c3/followers"
}
}
} ],
"timestamp" : 1401751485776,
"duration" : 220,
"organization" : "your-org",
"applicationName" : "your-app"
}