Durchführen von API-Aufrufen mithilfe der Microsoft Graph SDKs
Artikel
Die Microsoft Graph SDK-Dienstbibliotheken stellen eine Clientklasse bereit, die als Ausgangspunkt für die Erstellung aller API-Anforderungen verwendet werden kann. Es gibt zwei Arten von Clientklassen: Eine verwendet eine Fluent-Schnittstelle zum Erstellen der Anforderung (z. B client.Users["user-id"].Manager. ) und die andere akzeptiert eine Pfadzeichenfolge (z. B api("/users/user-id/manager"). ). Wenn Sie über ein Anforderungsobjekt verfügen, können Sie verschiedene Optionen angeben, z. B. Filtern und Sortieren, und schließlich den Typ des Vorgangs auswählen, den Sie ausführen möchten.
Es gibt auch das Microsoft Graph PowerShell SDK, das über keine Clientklasse verfügt. Stattdessen werden alle Anforderungen als PowerShell-Befehle dargestellt. Um beispielsweise den Vorgesetzten eines Benutzers abzurufen, lautet Get-MgUserManagerder Befehl . Weitere Informationen zum Suchen von Befehlen für API-Aufrufe finden Sie unter Navigieren im Microsoft Graph PowerShell SDK.
Lesen von Informationen aus Microsoft Graph
Zum Lesen von Informationen aus Microsoft Graph müssen Sie zunächst ein Anforderungsobjekt erstellen und dann die GET -Methode für die Anforderung ausführen.
# GET https://graph.microsoft.com/v1.0/me
user = await graph_client.me.get()
// GET https://graph.microsoft.com/v1.0/me
const user = await graphClient.api('/me').get();
Verwenden von $select zum Steuern der zurückgegebenen Eigenschaften
Beim Abrufen einer Entität werden nicht alle Eigenschaften automatisch abgerufen. manchmal müssen sie explizit ausgewählt werden. Außerdem ist die Rückgabe des Standardsatzes von Eigenschaften in einigen Szenarien nicht erforderlich. Wenn Sie nur die erforderlichen Eigenschaften auswählen, kann die Leistung der Anforderung verbessert werden. Sie können die Anforderung so anpassen, dass sie den $select Abfrageparameter in eine Liste von Eigenschaften einschließt.
// GET https://graph.microsoft.com/v1.0/me?$select=displayName,jobTitle
final User user = graphClient.me().get( requestConfiguration -> {
requestConfiguration.queryParameters.select = new String[] {"displayName", "jobTitle"};
});
// GET https://graph.microsoft.com/v1.0/me?$select=displayName,jobTitle
// Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetQueryParameters
$query = new UserItemRequestBuilderGetQueryParameters(
select: ['displayName', 'jobTitle']);
// Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetRequestConfiguration
$config = new UserItemRequestBuilderGetRequestConfiguration(
queryParameters: $query);
/** @var Models\User $user */
$user = $graphClient->me()
->get($config)
->wait();
# GET https://graph.microsoft.com/v1.0/users/{user-id}?$select=displayName,jobTitle
$userId = "71766077-aacc-470a-be5e-ba47db3b2e88"
# The -Property parameter causes a $select parameter to be included in the request
$user = Get-MgUser -UserId $userId -Property DisplayName,JobTitle
# GET https://graph.microsoft.com/v1.0/me?$select=displayName,jobTitle
# msgraph.generated.users.item.user_item_request_builder
query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(
select=['displayName', 'jobTitle']
)
config = RequestConfiguration(
query_parameters=query_params
)
user = await graph_client.me.get(config)
// GET https://graph.microsoft.com/v1.0/me?$select=displayName,jobTitle
const user = await graphClient
.api('/me')
.select(['displayName', 'jobTitle'])
.get();
Abrufen einer Liste von Entitäten
Das Abrufen einer Liste von Entitäten ähnelt dem Abrufen einer einzelnen Entität, mit dem Unterschied, dass andere Optionen zum Konfigurieren der Anforderung vorhanden sind. Der $filter Abfrageparameter kann das Resultset auf die Zeilen reduzieren, die der angegebenen Bedingung entsprechen. Der $orderby Abfrageparameter fordert an, dass der Server die Liste der Entitäten bereitstellt, die nach den angegebenen Eigenschaften sortiert sind.
Hinweis
Einige Anforderungen für Microsoft Entra Ressourcen erfordern die Verwendung erweiterter Abfragefunktionen. Wenn Sie eine Antwort erhalten, die auf eine ungültige Anforderung, eine nicht unterstützte Abfrage oder eine Antwort mit unerwarteten Ergebnissen hinweist, kann es möglich sein, dass die Anforderung erfolgreich ist, einschließlich des $count Abfrageparameters und ConsistencyLevel des Headers. Ausführliche Informationen und Beispiele finden Sie unter Erweiterte Abfragefunktionen für Verzeichnisobjekte.
Das beim Abrufen einer Liste von Entitäten zurückgegebene Objekt ist wahrscheinlich eine ausgelagerte Auflistung. Ausführliche Informationen zum Abrufen der vollständigen Liste der Entitäten finden Sie unter Paging durch eine Sammlung.
Zugreifen auf ein Element einer Sammlung
Für SDKs, die einen Fluent-Stil unterstützen, kann mithilfe eines Arrayindexes auf Sammlungen von Entitäten zugegriffen werden. Bei vorlagenbasierten SDKs ist es ausreichend, den Elementbezeichner in das Pfadsegment einzubetten, das der Sammlung folgt. Für PowerShell werden Bezeichner als Parameter übergeben.
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
var message = await graphClient.Me.Messages[messageId]
.GetAsync();
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
result, _ := graphClient.Me().Messages().
ByMessageId(messageId).Get(context.Background(), nil)
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
final Message message = graphClient.me().messages().byMessageId(messageId).get();
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
/** @var Models\Message $message */
$message = $graphClient->me()
->messages()
->byMessageId($messageId)
->get()
->wait();
# GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
# message_id is a string containing the id property of the message
message = await graph_client.me.messages.by_message_id(message_id).get()
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
const message = await graphClient.api(`/me/messages/${messageId}`).get();
Verwenden von $expand für den Zugriff auf verwandte Entitäten
Sie können den $expand Filter verwenden, um eine verknüpfte Entität oder Sammlung von Entitäten anzufordern, während Sie die Standard Entität anfordern.
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// messageId is a string containing the id property of the message
var message = await graphClient.Me.Messages[messageId]
.GetAsync(requestConfig =>
requestConfig.QueryParameters.Expand =
["attachments"]);
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// import github.com/microsoftgraph/msgraph-sdk-go/users
expand := users.ItemMessagesMessageItemRequestBuilderGetQueryParameters{
Expand: []string{"attachments"},
}
options := users.ItemMessagesMessageItemRequestBuilderGetRequestConfiguration{
QueryParameters: &expand,
}
// messageId is a string containing the id property of the message
result, _ := graphClient.Me().Messages().
ByMessageId(messageId).Get(context.Background(), &options)
// GET
// https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// messageId is a string containing the id property of the message
final Message message = graphClient.me().messages().byMessageId(messageId).get( requestConfiguration -> {
requestConfiguration.queryParameters.expand = new String[] {"attachments"};
});
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// messageId is a string containing the id property of the message
// Microsoft\Graph\Generated\Users\Item\Messages\Item\MessageItemRequestBuilderGetQueryParameters
$query = new MessageItemRequestBuilderGetQueryParameters(
expand: ['attachments']
);
// Microsoft\Graph\Generated\Users\Item\Messages\Item\MessageItemRequestBuilderGetRequestConfiguration
$config = new MessageItemRequestBuilderGetRequestConfiguration(
queryParameters: $query);
/** @var Models\Message $message */
$message = $graphClient->me()
->messages()
->byMessageId($messageId)
->get($config)
->wait();
# GET https://graph.microsoft.com/v1.0/users/{user-id}/messages?$expand=attachments
$userId = "71766077-aacc-470a-be5e-ba47db3b2e88"
$messageId = "AQMkAGUy.."
# -ExpandProperty is equivalent to $expand
$message = Get-MgUserMessage -UserId $userId -MessageId $messageId -ExpandProperty Attachments
# GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
# message_id is a string containing the id property of the message
# msgraph.generated.users.item.messages.item.message_item_request_builder
query_params = MessageItemRequestBuilder.MessageItemRequestBuilderGetQueryParameters(
expand=['attachments']
)
config = RequestConfiguration(
query_parameters=query_params
)
message = await graph_client.me.messages.by_message_id(message_id).get(config)
// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// messageId is a string containing the id property of the message
const message = await graphClient
.api(`/me/messages/${messageId}`)
.expand('attachments')
.get();
Löschen einer Entität
Löschanforderungen werden auf die gleiche Weise wie Anforderungen zum Abrufen einer Entität erstellt, verwenden aber eine DELETE Anforderung anstelle von GET.
// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
await graphClient.Me.Messages[messageId]
.DeleteAsync();
// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
err := graphClient.Me().Messages().
ByMessageId(messageId).Delete(context.Background(), nil)
// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
graphClient.me().messages().byMessageId(messageId).delete();
// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
$graphClient->me()
->messages()
->byMessageId($messageId)
->delete()
->wait();
# DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
# message_id is a string containing the id property of the message
await graph_client.me.messages.by_message_id(message_id).delete()
// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
await graphClient.api(`/me/messages/${messageId}`).delete();
Erstellen einer neuen Entität mit POST
Für Fluent-Stil- und vorlagenbasierte SDKs können sammlungen mit einer POST -Methode neue Elemente hinzugefügt werden. Für PowerShell akzeptiert ein New-* Befehl Parameter, die der hinzuzufügenden Entität zugeordnet sind. Die erstellte Entität wird vom Aufruf zurückgegeben.
// POST https://graph.microsoft.com/v1.0/me/calendars
var calendar = new Calendar
{
Name = "Volunteer",
};
var newCalendar = await graphClient.Me.Calendars
.PostAsync(calendar);
// POST https://graph.microsoft.com/v1.0/me/calendars
calendar := models.NewCalendar()
name := "Volunteer"
calendar.SetName(&name)
result, _ := graphClient.Me().Calendars().Post(context.Background(), calendar, nil)
// POST https://graph.microsoft.com/v1.0/me/calendars
final Calendar calendar = new Calendar();
calendar.setName("Volunteer");
final Calendar newCalendar = graphClient.me().calendars().post(calendar);
// POST https://graph.microsoft.com/v1.0/me/calendars
$calendar = new Models\Calendar();
$calendar->setName('Volunteer');
/** @var Models\Calendar $newCalendar */
$newCalendar = $graphClient->me()
->calendars()
->post($calendar)
->wait();
Die meisten Updates in Microsoft Graph werden mithilfe einer PATCH -Methode ausgeführt. Daher ist es nur erforderlich, die Eigenschaften, die Sie ändern möchten, in das übergebene Objekt einzuschließen.
// PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
var team = new Team
{
FunSettings = new TeamFunSettings
{
AllowGiphy = true,
GiphyContentRating = GiphyRatingType.Strict,
},
};
// teamId is a string containing the id property of the team
await graphClient.Teams[teamId]
.PatchAsync(team);
// PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
final Team team = new Team();
final TeamFunSettings funSettings = new TeamFunSettings();
funSettings.setAllowGiphy(true);
funSettings.setGiphyContentRating(GiphyRatingType.Strict);
team.setFunSettings(funSettings);
// teamId is a string containing the id property of the team
graphClient.teams().byTeamId(teamId).patch(team);
// PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
$funSettings = new Models\TeamFunSettings();
$funSettings->setAllowGiphy(true);
$funSettings->setGiphyContentRating(
new Models\GiphyRatingType(Models\GiphyRatingType::STRICT));
$team = new Models\Team();
$team->setFunSettings($funSettings);
// $teamId is a string containing the id property of the team
$graphClient->teams()
->byTeamId($teamId)
->patch($team);
# PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
# msgraph.generated.models.team_fun_settings.TeamFunSettings
fun_settings = TeamFunSettings()
fun_settings.allow_giphy = True
# msgraph.generated.models.giphy_rating_type
fun_settings.giphy_content_rating = GiphyRatingType.Strict
# msgraph.generated.models.team.Team
team = Team()
team.fun_settings = fun_settings
# team_id is a string containing the id property of the team
await graph_client.teams.by_team_id(team_id).patch(team)
// PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
const team: Team = {
funSettings: {
allowGiphy: true,
giphyContentRating: 'strict',
},
};
// teamId is a string containing the id property of the team
await graphClient.api(`/teams/${teamId}`).update(team);
Verwenden von HTTP-Headern zum Steuern des Anforderungsverhaltens
Sie können benutzerdefinierte Header mithilfe der Headers Sammlung an eine Anforderung anfügen. Für PowerShell ist das Hinzufügen von Headern nur mit der Invoke-GraphRequest -Methode möglich. In einigen Microsoft Graph-Szenarien werden benutzerdefinierte Header verwendet, um das Verhalten der Anforderung anzupassen.
Für SDKs, die den Fluent-Stil unterstützen, können Sie mithilfe des QueryParameters -Objekts benutzerdefinierte Abfrageparameterwerte bereitstellen. Bei vorlagenbasierten SDKs werden die Parameter URL-codiert und dem Anforderungs-URI hinzugefügt. Für PowerShell und Go werden definierte Abfrageparameter für eine bestimmte API als Parameter für den entsprechenden Befehl verfügbar gemacht.