8.5 KiB
Google API communication
Sluzba poskytuje obecnou komunikacni vrstvu pro Google API. Neobsahuje secrets ve zdrojovem kodu a pro verejne routovani pouziva ROOT_PATH, aby Swagger/OpenAPI fungoval za AppFactory prefixem /apps/<app-id>.
Discovery
GET /google/discovery/apisvraci seznam Google API dostupnych pres Google Discovery service.GET /google/discovery/apis/{api}/{version}/restvraci REST discovery dokument konkretniho API, napr.drive/v3.
Discovery endpointy slouzi k dohledani dostupnych resource, metod, schema a OAuth scope pro konkretni Google API.
OAuth
POST /google/oauth/tokenpodporujeauthorization_codearefresh_tokengrant.GET /google/oauth/scopesvraci doporucene scopes pro podporovane sluzby.GET /google/oauth/authorize-urlvygeneruje Google consent URL.POST /google/oauth/service-account-tokenpodporuje service account JWT bearer flow.POST /google/oauth/revokerevokuje token.GET /google/oauth/tokeninfovraci informace o access tokenu nebo ID tokenu.
OAuth client a service account hodnoty je vhodne predavat pres environment variables:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_SERVICE_ACCOUNT_EMAILGOOGLE_PRIVATE_KEYGOOGLE_SCOPES
Env promenne a request alternativy
Swagger obsahuje GET /google/configuration, ktery vypise podporovane env promenne, jejich pouziti a alternativy v requestu. Endpoint nevraci hodnoty secrets.
GOOGLE_CLIENT_ID:clientId,X-Google-Client-IdGOOGLE_CLIENT_SECRET:clientSecret,X-Google-Client-SecretGOOGLE_REDIRECT_URI:redirectUri,X-Google-Redirect-UriGOOGLE_SERVICE_ACCOUNT_EMAIL:serviceAccountEmail,X-Google-Service-Account-EmailGOOGLE_PRIVATE_KEY:privateKey,X-Google-Private-KeyGOOGLE_SCOPES:scope,scopes,X-Google-ScopesGOOGLE_ACCESS_TOKEN:Authorization: Bearer <token>,accessToken,accessTokenEnv,X-Google-Access-Token,X-Google-Access-Token-EnvGOOGLE_API_KEY:apiKey,apiKeyEnv,X-Google-Api-Key,X-Google-Api-Key-Env
OAuth krok za krokem
- Zavolej
GET /google/oauth/scopes. - Vyber scopes, napr. Sheets + Drive metadata:
https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata.readonly
- Zavolej:
GET /google/oauth/authorize-url?redirectUri=https://example.test/oauth/callback&scopes=https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata.readonly
- Otevri
authorizationUrlz odpovedi. - Po souhlasu Google presmeruje na
redirectUris query parametremcode. - Code vymen:
{
"grantType": "authorization_code",
"code": "code-from-google-redirect",
"redirectUri": "https://example.test/oauth/callback"
}
access_tokenposilej do produktovych endpointu jako:
Authorization: Bearer <access_token>
Pro dlouhodobe pouziti si uloz refresh_token mimo zdrojovy kod a obnovuj token pres:
{
"grantType": "refresh_token",
"refreshToken": "stored-refresh-token"
}
Obecne REST volani
POST /google/request je genericka proxy pro Google REST API. Request obsahuje HTTP metodu, cilovou Google URL nebo kombinaci baseUrl a path, volitelne query parametry, body a autorizaci.
Priklad volani Google Drive:
{
"method": "GET",
"baseUrl": "https://www.googleapis.com",
"path": "/drive/v3/files",
"query": {
"pageSize": 10
},
"accessTokenEnv": "GOOGLE_ACCESS_TOKEN"
}
Z bezpecnostnich duvodu jsou povolene jen HTTPS URL na Google domenach. Requesty na jine hosty sluzba odmita.
Konkretni produktove endpointy
Krome obecne proxy jsou dostupne konkretni wrappery nad nejbeznejsimi Google API:
Calendar
GET /google/calendar/calendarsPOST /google/calendar/calendarsGET /google/calendar/calendars/{calendarId}PATCH /google/calendar/calendars/{calendarId}DELETE /google/calendar/calendars/{calendarId}GET /google/calendar/calendars/{calendarId}/eventsPOST /google/calendar/calendars/{calendarId}/eventsGET /google/calendar/calendars/{calendarId}/events/{eventId}PATCH /google/calendar/calendars/{calendarId}/events/{eventId}DELETE /google/calendar/calendars/{calendarId}/events/{eventId}POST /google/calendar/calendars/{calendarId}/events/{eventId}/move
Sheets
GET /google/sheets/spreadsheets- seznam Google Sheets souboru;spreadsheetIdjefiles[].idPOST /google/sheets/spreadsheetsGET /google/sheets/spreadsheets/{spreadsheetId}GET /google/sheets/spreadsheets/{spreadsheetId}/sheets- seznam tabu/listu; numerickesheetIdjesheets[].properties.sheetId, A1 range pouzivasheets[].properties.titlePOST /google/sheets/write-by-url- zapis hodnot podle plne URL spreadsheetu a nazvu listuPOST /google/sheets/spreadsheets/{spreadsheetId}/batch-updateGET /google/sheets/spreadsheets/{spreadsheetId}/values?range=Sheet1!A1:B10PUT /google/sheets/spreadsheets/{spreadsheetId}/values?range=Sheet1!A1POST /google/sheets/spreadsheets/{spreadsheetId}/values/append?range=Sheet1!A1POST /google/sheets/spreadsheets/{spreadsheetId}/values/batch-updatePOST /google/sheets/spreadsheets/{spreadsheetId}/values/batch-clear
Zapis podle URL a nazvu listu
Endpoint POST /google/sheets/write-by-url je urceny pro bezny zapis bez rucni prace se spreadsheetId a A1 range.
{
"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1abcDEFghiJKLmnopQRstuVWXyz/edit#gid=0",
"sheetName": "Objednavky",
"startCell": "A1",
"mode": "append",
"valueInputOption": "USER_ENTERED",
"values": [
["Datum", "Zakaznik", "Castka"],
["2026-06-15", "ACME", 1234]
]
}
Chovani:
mode=appendvola Google Sheets append a prida radky pod existujici tabulku.mode=updatevola Google Sheets update a prepise bunky odstartCell.sheetNamemuze obsahovat mezery i apostrofy; sluzba ho sama escapuje do A1 range.spreadsheetUrlmuze byt bezna URL ve tvaruhttps://docs.google.com/spreadsheets/d/{spreadsheetId}/edit#gid=0.
Drive
GET /google/drive/filesPOST /google/drive/filesGET /google/drive/files/{fileId}PATCH /google/drive/files/{fileId}DELETE /google/drive/files/{fileId}GET /google/drive/files/{fileId}/export?mimeType=application/pdfGET /google/drive/files/{fileId}/permissionsPOST /google/drive/files/{fileId}/permissionsDELETE /google/drive/files/{fileId}/permissions/{permissionId}
Gmail
GET /google/gmail/profileGET /google/gmail/messagesGET /google/gmail/messages/{messageId}POST /google/gmail/messages/sendGET /google/gmail/labelsPOST /google/gmail/labels
Docs, Slides a Forms
POST /google/docs/documentsGET /google/docs/documents/{documentId}POST /google/docs/documents/{documentId}/batch-updatePOST /google/slides/presentationsGET /google/slides/presentations/{presentationId}POST /google/slides/presentations/{presentationId}/batch-updatePOST /google/forms/formsGET /google/forms/forms/{formId}POST /google/forms/forms/{formId}/batch-updateGET /google/forms/forms/{formId}/responses
People a Tasks
GET /google/people/connectionsGET /google/people/{resourceName}POST /google/people/contactsPATCH /google/people/{resourceName}DELETE /google/people/{resourceName}GET /google/tasks/listsPOST /google/tasks/listsGET /google/tasks/lists/{tasklistId}/tasksPOST /google/tasks/lists/{tasklistId}/tasksPATCH /google/tasks/lists/{tasklistId}/tasks/{taskId}DELETE /google/tasks/lists/{tasklistId}/tasks/{taskId}
Kde vzit ID
calendarId:GET /google/calendar/calendars, hlavni kalendar lze typicky volat jakoprimary.eventId:GET /google/calendar/calendars/{calendarId}/events.spreadsheetId:GET /google/sheets/spreadsheets, polefiles[].id.sheetId:GET /google/sheets/spreadsheets/{spreadsheetId}/sheets, polesheets[].properties.sheetId.fileId:GET /google/drive/files, polefiles[].id.messageId:GET /google/gmail/messages, polemessages[].id.documentId: ID Google Docs souboru z Drive.presentationId: ID Google Slides souboru z Drive.formId: ID Google Forms souboru z Drive nebo odpoved zPOST /google/forms/forms.
AppFactory overeni
Po deploy over:
GET /apps/google-service/healthGET /apps/google-service/docsGET /apps/google-service/openapi.json
OpenAPI dokument musi obsahovat servers[0].url s hodnotou ROOT_PATH, napr. /apps/google-service, aby Swagger UI volalo endpointy pres verejnou proxy cestu.