왜 휴식이 필요한가?
API 또는 애플리케이션 플러그인은 여러 종류와 표준으로 제공되지만, 저는 개인적으로 가장 좋아하는 REST 서비스에 대해 논의할 것입니다. "왜 REST인가?"라고 물을 수도 있습니다. 답은 간단합니다. SOAP보다 쉽기 때문입니다. 다른 이유도 있는데, REST는 XML만 지원하는 SOAP보다 더 많은 데이터 형식을 지원합니다. 제가 REST가 최고라고 생각하는 또 다른 큰 이유는 JSON과 함께 사용하기 때문입니다.
JSON(JavaScript Object Notation)은 일반적으로 더 빠른 데이터 파싱을 제공하므로 이 가벼운 데이터 형식을 사용하는 브라우저에 대한 지원이 더 좋습니다. 마지막으로 REST API를 사용합니다. Mendix 앱이 작동하려면 클라이언트 라이브러리나 파일을 설치할 필요가 없습니다.
어떤 API를 사용하고 있나요?
Google Cloud API에는 Google의 최고 서비스 전체가 소비 가능한 메서드로 구분되어 있으며, 많은 메서드는 완전히 무료로 사용할 수 있습니다. 그러나 이러한 API와 상호 작용하려면 요청이 OAuth 토큰으로 자체 인증을 받아야 합니다. Google은 대부분의 API에 대해 OAuth 2.0을 사실상의 인증 메서드로 사용합니다. 즉, 사용자가 Google API를 사용하려면 먼저 다음을 호출해야 합니다. 구글 아이덴티티 API (서버 측 앱의 경우) Google 서비스에 대한 후속 호출을 수행하기 위해.
다시 말해, 토큰을 얻는 것은 Google API를 구현하기 위한 첫 번째 단계이며, API 개발을 시작하려는 사람이라면 시작하기에 좋은 곳입니다.
사전 조건
시작하기 전에 이 블로그에서는 Google Cloud Platform의 프로젝트에 대해 모든 Google API를 활성화하고 다음을 완료했다고 가정합니다. OAuth 자격 증명 페이지 Oauth 동의 화면 해당 Google Project의 경우 특히 앱이 로컬 호스트나 배포된 웹 애플리케이션을 가리키도록 리디렉션 URL을 구성해야 하며 앱의 OAuth 클라이언트를 구성한 후 Google에서 제공하는 클라이언트 ID와 클라이언트 비밀이 모두 필요합니다.
REST 메서드에 대한 단어
이 예에서, 저는 POST 메서드를 사용하여 Google의 Identity API를 호출하고 있지만, 그게 무슨 뜻일까요? REST에서는 알아야 할 메서드가 5개 있습니다.
- POST — 이것은 새로운 레코드를 만드는 데 사용됩니다.
- 바로 — 이것은 레코드 또는 레코드 목록을 반환합니다.
- PUT — 레코드를 업데이트하거나 교체하는 데 사용됩니다.
- 반점 — 레코드를 업데이트하거나 수정하는 데 사용됩니다.
- 삭제 — 기록을 삭제하거나 완화합니다.
내가 아는 다른 방법도 몇 가지 있지만, 내 작업에서는 그런 방법을 접한 적이 없습니다. 관심이 있으시다면 방법에 대한 좋은 요약이 있습니다. 여기를 클릭해 문의해주세요.
REST 서비스 통합을 위한 일반 계획
사용하는 방법과 사용하는 API에 따라 통합을 완료하는 실제 단계는 다를 수 있습니다. 예를 들어 GET 요청은 요청 본문이 없고 대신 쿼리 문자열을 사용합니다. 그러나 일반적으로 REST 서비스를 사용하는 단계는 다음과 같습니다. Mendix 스튜디오 프로:
- 위치를 설정하세요
- 이는 엔드포인트 또는 URI라고도 하며 서비스가 호스팅되는 위치입니다.
2. HTTP 방법을 선택하세요
- 위에 언급된 여러 방법 중에서 선택하는 것이 일반적이며, 일반적으로 API 설명서에 어떤 방법을 선택해야 하는지 설명되어 있습니다.
3. 인증
- OAUTH 또는 API 키가 필요할 수도 있고, 전혀 필요하지 않을 수도 있습니다.
4. HTTP 헤더
- 헤더는 다양한 역할을 할 수 있으며, 각 서비스는 고유한 헤더를 가질 수 있습니다. 사용하려는 API에 대한 설명서를 참조해야 합니다.
응답 형식을 설정하려면 헤더 "컨텐츠 타입” 그리고 그것에 가치를 제공합니다.애플리케이션/JSON”JSON 형식의 경우 또는 “응용 프로그램/XML” XML의 경우. '와 같은 다른 옵션이 있습니다.애플리케이션/x-www-form-urlencoded', 이 튜토리얼에서 사용할 것입니다(이 Stack Overflow 게시물에서 요약을 확인하세요) 모든 콘텐츠 유형).
5. 요청 생성
- 대부분 메서드의 경우 일반적으로 JSON 형식으로 요청 본문을 제공해야 합니다. GET 메서드의 경우 일반적으로 위치 끝에 추가된 쿼리 문자열을 사용하여 매개변수를 전달하며, 일반적으로 위치 끝에 "?"로 식별되며 URI라고도 합니다.
6. 응답 처리
- 여기에는 몇 가지 옵션이 있습니다. 응답을 문자열 변수에 저장하거나 데이터를 도메인 모델에 매핑하는 가져오기 매핑을 적용하는 것입니다. 가장 좋은 옵션은 경우에 따라 달라지겠지만 대부분의 경우 가져오기 매핑을 적용하는 것이 좋습니다.
Google Identity는 어떻게 작동하나요?
시작하기에 앞서, Google이 서버 측 앱에 OAuth 2.0을 어떻게 구현하는지 간단히 설명하겠습니다.
구글 문서 5단계로 설명하겠습니다. 여기에 요약해 드리겠습니다. 웹 서버 애플리케이션에 OAuth 2.0 사용 | Google Identity | Google Developers.
1단계: 권한 부여 매개변수 설정
즉, 우리는 URL을 생성해야 합니다. Mendix Google 서비스를 통해 사용자를 대신하여 애플리케이션이 액세스하려는 사항에 대한 세부 정보를 제공하는 앱입니다.
2단계에서는 사용자가 이 Google URL로 이동하여 사용자의 Google 계정에 대한 액세스를 승인한 다음 다시 귀하의 사이트로 리디렉션됩니다. Mendix 앱과 함께 토큰 요청을 승인하는 데 사용할 액세스 코드가 제공됩니다.
여기서 중요한 값은 다음과 같습니다.
- 리디렉션된 URI (앱의 URL로 리디렉션되어야 함)
- 범위 (예: 메일/드라이브/번역 등 Google API에 대한 권한 클릭) 여기에서 확인하세요. (Google API의 모든 범위 목록은 여기를 참조하세요)
- 고객 ID (OAuth로 앱을 등록한 후 Google에서 제공하는 클라이언트 ID)
- 주 정부 (앱에서 상태를 유지하는 데 사용하는 값, 나중에 올바른 요청을 검색하는 데 사용할 수 있는 식별자)
이 URL이 어떤 모습일지에 대한 예는 다음과 같습니다.
https://accounts.google.com/o/oauth2/v2/auth?범위=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-translation&접근_유형=오프라인&포함_허가_범위=참&응답 _ 유형=코드&상태= 123 &리디렉션_우리=https://localhost:8080/링크/구글리디렉션?암호=&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com
2단계: Google의 OAuth 2.0 서버로 리디렉션
1단계에서 생성한 URL로 사용자를 리디렉션합니다(저는 Nanoflows에서 사용 가능한 Open URL Javascript Action을 사용했습니다)

3단계: Google이 사용자에게 동의를 요청합니다.

Google은 사용자에게 로그인/계정 선택을 한 다음 앱에서 요청한 액세스를 승인하라는 요청을 보냅니다.

4단계: OAuth 2.0 서버 응답 처리
사용자가 계정에 대한 요청을 확인한 후 Google은 사용자를 1단계에서 제공한 리디렉션 URI 매개변수로 리디렉션합니다. 이것은 앱 URL이지만 내 경우에는 다음을 사용했습니다. 딥링크 리디렉션을 처리하는 모듈입니다. 이렇게 하면 Google이 링크에 포함하는 권한 부여 코드에 액세스할 수 있습니다. 이것은 이를 처리하기 위해 생성된 딥 링크의 예입니다.
https://localhost:8080/link/googleredirect?code=
5단계: 권한 코드를 새로 고침 및 액세스 토큰으로 교환
Google에서 귀하에게 다음을 제공하면 액세스 코드, 이제 REST 호출을 만들어 공식 토큰으로 교환할 수 있습니다. 여기 내 예제에 대한 요청과 응답이 있습니다.
Google에서 내 프로젝트를 삭제했는데 이 게시물을 게시한 후에는 이 요청이 원래대로 작동하지 않습니다.귀하의 클라이언트 ID와 클라이언트 비밀번호를 사용해야 합니다.)
POST 요청에 대한 요청 내용 https://oauth2.googleapis.com/token?grant_type=authorization_code&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=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&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3D HTTP/1.1 콘텐츠 유형: application/x-www-form-urlencoded
code=4%2F0AdQt8qiGaCaJYgKgRpHKqXj8265JL72PfsKpusgctqYXhVwPxg5qn4EHU9iUGnMxMiHiqA
POST 요청에 대한 응답 내용 https://oauth2.googleapis.com/token?grant_type=authorization_code&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=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&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3D HTTP/1.1 200 OK 캐시 제어: no-cache, no-store, max-age=0, must-revalidate 프래그마: no-cache 날짜: 01년 2022월 12일 월요일 오전 53시 44분 01초 GMT 만료: 1990년 00월 00일 월요일 오전 00시 8분 2초 GMT 콘텐츠 유형: application/json; 문자 집합=utf-0 다양함: 원본 다양함: X-원본 다양함: 참조자 서버: HTTPServer3의 스캐폴딩 X-XSS 보호: 443 X-프레임 옵션: SAMEORIGIN X-콘텐츠 유형 옵션: nosniff Alt 서비스: h2592000=":3"; ma=29,h443–2592000=":3"; ma=050,h443-Q2592000=”:3"; ma=046,h443-Q2592000=”:3"; ma=043,h443-Q2592000=”:443"; ma=2592000,quic=”:46,43"; ma=XNUMX; v=”XNUMX" 전송 인코딩: 청크
{
“access_token”: “ya29.A0AVA9y1tawnqK-42beGFAomiTqx8Zg0UUiedmIIPaAIraSas6VEO2D7NH5rInBPCUQK_7aghDiiTVrD_SnnQzOAtGq3XP2GQfWbpuZmDFjWfL0FSAw6JQU37mthQnRFsJvvqlgzTcryTdruKiOtcc63YrI8DvYUNnWUtBVEFTQVRBU0ZRRTY1ZHI4NjVOQUxhR2ppS0kyOVpINVZoYTJ4Zw0163”,
“expires_in”: 3599,
“scope”: “https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/cloud-translation", “토큰_유형”: “보유자” }
이제 그 아키텍처를 이해하셨기를 바라며 토큰 API를 호출하는 방법에 대해 자세히 알아보겠습니다.
API 호출 Mendix
위치 설정
위치를 설정하려면 호출 REST 작업(마이크로플로우)의 속성으로 이동하여 편집을 클릭합니다. API가 있는 URI를 따옴표 안에 입력하여 위치를 설정할 수 있습니다. 문자열 값.
하지만 이를 저장할 애플리케이션 상수를 만드는 것이 가장 좋습니다. 그러면 오타나 복사-붙여넣기 실수에 대해 걱정할 필요가 없습니다.
이것의 위치는 다음과 같습니다 https://oauth2.googleapis.com/token위치 끝에 쿼리를 추가한다는 점을 명심하세요.

HTTP 방법 선택
위에서 언급했듯이 우리는 다음을 사용하고 있습니다. POST 방식 이 통합을 위해. 저는 Google 문서에 그들의 예에서 그렇게 해야 한다고 표시되어 있기 때문에 이것을 선택했습니다.
다음은 인증입니다.
등록된 사용자인지 확인하려면 Google에 요청에서 일부 세부 정보를 보내야 합니다. 클라이언트 ID 및 클라이언트 비밀번호 우리 앱은 Google에서 발행되었으며(쿼리 필드로) 다음을 전달해야 합니다. 액세스 코드 요청 본문에서 사용자에게 부여됩니다.
어떤 헤더가 필요한가요?
이 요청의 경우 '헤더만 추가하면 됩니다.콘텐츠 유형' 가치를 부여하십시오. '응용 프로그램 / x-www-form-urlencoded'. Google에 요청이 어떤 형식을 사용하는지 알려주므로 이를 전달합니다.
필수 헤더를 포함하지 않으면 일반적으로 401 응답(잘못된 요청)이 발생하므로, 아무것도 없다고 가정하기 전에 항상 제공된 문서를 확인하세요.
우리의 쿼리를 구축
URI에서 요청에 대한 일부 매개변수를 전달해야 하므로 API 기본 위치에 쿼리를 추가해야 합니다.
기지 위치 :
https://oauth2.googleapis.com/token
추가 쿼리 문자열:
?부여 _ 유형=인증코드&CLIENT_ID=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=GOCSPX-pMf5pkOyFv9SQIMfclVl오워지헤H&리디렉션_우리=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3
Google에서 각 필드의 의미를 직접 설명한 내용은 다음과 같습니다.

쿼리를 URL 인코딩하는 것을 잊지 마세요 요청하기 전에.
URL 인코딩? 그게 뭐야?
쿼리 문자열에 특수 문자나 공백이 있으면 401 오류(잘못된 요청)가 발생합니다. 이는 이러한 특수 문자를 브라우저에서 보편적으로 허용되는 것으로 변환하는 간단한 방법입니다. URL 인코딩은 문자열 함수입니다. Mendix이를 마이크로플로우나 나노플로우라고 부를 수 있습니다.
이제 모든 것을 추가할 수 있으며 최종 문자열은 다음과 같아야 합니다.
https://accounts.google.com/o/oauth2/v2/auth?범위=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-translation&접근_유형=오프라인&포함_허가_범위=참&응답 _ 유형=코드&상태= 1 &리디렉션_우리=https://localhost:8080/링크/구글리디렉션?코드=&CLIENT_ID=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com
실제 쿼리 문에는 자격 증명이 포함되고 앱 사용자의 액세스 코드와 리디렉션 URL이 제공되므로 내 것과는 다릅니다.
요청 본문 정의
이것은 Post Method이므로 요청 본문을 제공해야 합니다. 요청에서 다음을 선택합니다. 사용자 정의 요청 템플릿 그리고 본문을 제공합니다 :
코드=YOUR_USER_ACCESS_CODE

이제 응답을 처리합니다
Mendix 우리가 가져오기 매핑 적용 응답 데이터를 도메인 모델에 매핑합니다.
이를 위해서는 응답이 어떤 것인지에 대한 JSON 샘플이 필요합니다. Google은 설명서에서 이 샘플을 제공합니다.
{ "액세스 토큰": "1/fFAGRNJru1FTz70BzhT3Zg", "만료일": 3920, "토큰 유형": "소지자", "범위": "https://www.googleapis.com/auth/drive.metadata.readonly", "새로 고침 토큰": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Studio Pro에서 호출 REST 활동의 응답 탭에서 "가져오기 매핑 적용"을 선택합니다.
표시되는 창에서 새 가져오기 매핑을 만들도록 선택하고 매핑에 이름을 지정합니다.
가져오기 매핑 편집기에서 "요소 선택화면 왼쪽 상단 모서리에 있는 "를 선택합니다.JSON 구조"를 옵션으로 선택하세요.
선택 또는 JSON 매핑을 생성하다, 적절한 이름을 지정합니다. 이제 위의 JSON을 텍스트 영역에 붙여넣고 "새로 고침"을 클릭합니다.

"확인"을 클릭하여 이 창을 닫습니다. 이제 "요소 선택" 화면으로 돌아가서 모두 확장을 클릭한 다음 모두 체크한 다음 확인을 클릭합니다.

다음으로, 가져오기 매핑에서 이제 간단히 "자동으로 매핑"을 클릭하면 됩니다. Studio Pro는 필요한 모든 엔터티와 연결을 자동으로 생성합니다. 기본적으로 이러한 엔터티는 비지속성 엔터티(메모리에 저장되고 데이터베이스에 커밋되지 않는 엔터티)로 생성됩니다. 필요한 경우 이 매핑을 수동으로 수정할 수 있지만 대부분의 경우 아무것도 없으므로 그대로 둘 수 있습니다.
이제 마이크로플로에서 API가 반환한 데이터에 액세스하여 검색할 수 있습니다.

앱에서 데이터에 액세스할 수 있게 되면 데이터를 어떻게 처리할 것인지에 대한 구체적인 사항은 귀하에게 달려 있습니다. 각 서비스는 다르며, 두 가지 구현이 동일하지 않습니다.

제 예제에서는 토큰을 데이터베이스의 사용자 계정과 연결된 지속 가능한 엔터티에 저장했지만 실제 구현에서는 암호화를 추가하는 것도 고려해야 합니다.
그게 다야
REST 서비스를 구현하는 방법에 대해 자세히 읽고 싶다면 이 글이 도움이 되었으면 좋겠습니다. Mendix, 우리의 자세한 내용은 공식 문서에서 확인하세요. 자세한 내용은 페이지를 참조하거나 당사로 이동하세요. 학원 그리고 학습을 시작하세요.