GraphAPI란
- Microsoft Graph API는 Microsoft 365, Azure Active Directory, Teams, OneDrive 등을 포함한 다양한 Microsoft 서비스의 데이터를 통합적으로 액세스할 수 있는 RESTful API.
- 조금 더 풀어서 가볍게 이야기하자면, 마소의 애져 환경 위에서 개발하는 개발자들이 인증 및 데이터 정보에 접근해서 로직을 짜고자 할 때, 그 정보에 대해서 엔드포인트 형태로 즉 Restful하게 접근하는 것.
- 참고 : https://developer.microsoft.com/en-us/graph/graph-explorer
GraphAPI의 엔드포인트
Graph API의 엔드포인트는 Microsoft 365의 리소스 계층 구조에 따라 나뉨.
- User API: 조직 내 사용자 정보 조회.
GET /users
- Group API: 그룹 및 그룹 멤버 정보 조회.
GET /groups
GET /groups/{groupId}/members
- Transitive Members API: 그룹 계층 구조 포함 멤버 조회.
GET /groups/{groupId}/transitiveMembers
GraphAPI에서의 일괄취득
- 전체 어플리케이션에 대해 그 밑에 네스팅된 서브 그룹들에 대한 정보 일괄 취득은 기본적으로 불가능. 하지만 배치를 이용해서 복수의 어플리케이션에 대한 그 밑의 서브 그룹들에 대한 전체 정보를 취득하는 로직을 추가할 수는 있다(20개로 제한).
- 하지만 하나의 어플리케이션에 대해서 그 밑에 네스팅된 서브 그룹을 일괄 취득하는 방법은 존재한다.
transitiveMembers 엔드포인트를 사용하는 것이다. 이렇게 되면 어플리케이션 - 플랜트 - 유저라는 계층이 존재할 때 플랜트와 유저를 완전히 동일한 계층으로 플랫하게 다루어서 전체 정보를 가져온다. 그래서 돌아온 정보 결과에 대해 $filter를 걸면 플랜트를 거치지 않고 유저 정보만 취득한다든지 할 수 있다.
- 지금 업무에서 GraphAPI에 대한 복잡한 이중 인증 작업을 중단하고(어플리케이션에 접근해서 플랜트를 취득하고 그 다음에 그 밑의 유저를 취득하고 그걸 루프 돌리고) 일괄취득에 대한 알고리즘만 사용해서 인증 정보를 가져오는 작업을 하는 중.
ETC
- 그렇다면 GraphAPI에서 엔드포인트는 어디서 설정하느냐...
- 일단 우리는 C# 코드에서
[JsonPropertyName("엔드포인트이름 ex.banana")] 설정하고 있다.
- 이걸 이제 Swagger나 Postman에서, 예를 들자면
(우리 회사가 설정한 GraphAPI 관련 어드레스)/{banana}/{bananaID} 같은 API 엔드포인트를 리퀘스트로 날리면 관련 GraphAPI 정보가 돌아오는 것이다.