Firebase Admin SDK คือชุดไลบรารีฝั่งเซิร์ฟเวอร์ที่ช่วยให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่มีสิทธิ์เพื่อดำเนินการต่างๆ เช่น การค้นหาและการเปลี่ยนแปลงในบริการ Firebase Data Connect สำหรับการจัดการข้อมูลแบบเป็นกลุ่ม และการดำเนินการอื่นๆ ที่มีสิทธิ์ระดับสูงและข้อมูลเข้าสู่ระบบที่จำลอง
Admin SDK มี API ให้คุณเรียกใช้การดำเนินการในโหมดอ่าน/เขียนและโหมดอ่านอย่างเดียว การดำเนินการแบบอ่านอย่างเดียวช่วยให้คุณมั่นใจได้ว่าจะสามารถใช้ฟังก์ชันการดูแลระบบที่ไม่สามารถแก้ไขข้อมูลในฐานข้อมูลได้
การตั้งค่า Admin SDK
หากต้องการเริ่มใช้ Firebase Data Connect ในเซิร์ฟเวอร์ คุณจะต้องติดตั้งและตั้งค่า Admin SDK สำหรับ Node.js ก่อน
เริ่มต้น Admin SDK ในสคริปต์
หากต้องการเริ่มต้น SDK ให้นำเข้าData Connectส่วนขยายและ ประกาศรหัสบริการและสถานที่ตั้งของโปรเจ็กต์
import { initializeApp } from 'firebase-admin/app'; import { getDataConnect } from 'firebase-admin/data-connect'; // If you'd like to use OAuth2 flows and other credentials to log in, // visit https://firebase.google.com/docs/admin/setup#initialize-sdk // for alternative ways to initialize the SDK. const app = initializeApp(); const dataConnect = getDataConnect({ serviceId: 'serviceId', location: 'us-west2' });
ออกแบบการค้นหาและการเปลี่ยนแปลงเพื่อใช้กับ Admin SDK
Admin SDK มีประโยชน์ในการทดสอบการดำเนินการของ Data Connect โดยพิจารณาจากสิ่งต่อไปนี้
ทําความเข้าใจ SDK และคําสั่งการดําเนินงาน @auth(level: NO_ACCESS)
เนื่องจาก Admin SDK ทำงานโดยใช้สิทธิ์ จึงสามารถเรียกใช้การค้นหาและการเปลี่ยนแปลงใดๆ ของคุณได้ ไม่ว่าระดับการเข้าถึงที่ตั้งค่าโดยใช้@auth
Directive จะเป็นอย่างไร รวมถึงระดับ NO_ACCESS
หากคุณจัดระเบียบการค้นหาและการเปลี่ยนแปลงการดูแลระบบควบคู่ไปกับการดำเนินการของไคลเอ็นต์ใน.gql
ไฟล์ต้นฉบับเพื่อนำเข้าไปยังสคริปต์การดูแลระบบ Firebase ขอแนะนำให้คุณทำเครื่องหมายการดำเนินการดูแลระบบโดยไม่มี ระดับการเข้าถึงการให้สิทธิ์ หรืออาจระบุให้ชัดเจนยิ่งขึ้นและตั้งค่าเป็นNO_ACCESS
ไม่ว่าจะด้วยวิธีใดก็ตาม วิธีนี้จะป้องกันไม่ให้มีการดำเนินการดังกล่าวจากไคลเอ็นต์หรือในบริบทอื่นๆ ที่ไม่มีสิทธิ์
ใช้ SDK กับโปรแกรมจำลอง Data Connect
ในสภาพแวดล้อมต้นแบบและสภาพแวดล้อมการทดสอบ การดำเนินการเริ่มต้นข้อมูลและ การดำเนินการอื่นๆ กับข้อมูลในเครื่องอาจมีประโยชน์ Admin SDK ช่วยให้คุณลดความซับซ้อนของเวิร์กโฟลว์ได้ เนื่องจากจะไม่สนใจการตรวจสอบสิทธิ์และการให้สิทธิ์สำหรับโฟลว์ในเครื่อง
Firebase Admin SDK จะเชื่อมต่อกับData Connect โปรแกรมจำลองโดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม DATA_CONNECT_EMULATOR_HOST
ดังนี้
export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:9399"
ดูข้อมูลเพิ่มเติมได้ที่
นำกรณีการใช้งานทั่วไปไปใช้
Admin SDK มีไว้สำหรับการดำเนินการที่มีสิทธิ์ในข้อมูลสำคัญ
Admin SDK มีอินเทอร์เฟซ 2 อย่าง ได้แก่
- อินเทอร์เฟซทั่วไปสำหรับการดำเนินการส่วนใหญ่แบบอ่าน-เขียนหรืออ่านอย่างเดียว ซึ่งโค้ดของคุณจะใช้การค้นหาและการเปลี่ยนแปลง และส่งไปยังเมธอดแบบอ่าน-เขียน
executeGraphql
หรือเมธอดแบบอ่านอย่างเดียวexecuteGraphqlRead
- อินเทอร์เฟซเฉพาะสำหรับการดำเนินการข้อมูลแบบเป็นกลุ่ม ซึ่งแทนที่จะใช้เมธอด
executeGraphql
ทั่วไป แต่จะแสดงเมธอดเฉพาะสำหรับการดำเนินการเปลี่ยนแปลง:insert
,insertMany
,upsert
และupsertMany
จัดการข้อมูลผู้ใช้ด้วยexecuteGraphql
กรณีการใช้งานทั่วไปสำหรับ Admin SDK คือการจัดการข้อมูลผู้ใช้
ใช้ข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ
แนวทางที่ตรงไปตรงมาที่สุดคือการเข้าถึงข้อมูลผู้ใช้โดยใช้ข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ
// User can be publicly accessible, or restricted to admins const query = "query getProfile(id: AuthID) { user(id: $id) { id name } }"; interface UserData { user: { id: string; name: string; }; } export interface UserVariables { id: string; } const options:GraphqlOptions<UserVariables> = { variables: { id: "QVBJcy5ndXJ1" } }; // executeGraphql const gqlResponse = await dataConnect.executeGraphql<UserData, UserVariables>(query, options); // executeGraphqlRead (similar to previous sample but only for read operations) const gqlResponse = await dataConnect.executeGraphqlRead<UserData, UserVariables>(query, options); // gqlResponse -> { "data": { "user": { "id": "QVBJcy5ndXJ1", "name": "Fred" } } }
สวมรอยข้อมูลเข้าสู่ระบบของผู้ใช้
นอกจากนี้ ยังมีกรณีการใช้งานที่คุณต้องการให้สคริปต์แก้ไขข้อมูลผู้ใช้โดยอิงตามข้อมูลเข้าสู่ระบบที่จำกัดในนามของผู้ใช้ที่เฉพาะเจาะจง แนวทางนี้เป็นไปตาม หลักการให้สิทธิ์ขั้นต่ำที่สุด
หากต้องการใช้อินเทอร์เฟซนี้ ให้รวบรวมข้อมูลจากโทเค็นการให้สิทธิ์ JWT ที่กำหนดเองซึ่ง เป็นไปตามรูปแบบโทเค็น Authentication นอกจากนี้ โปรดดูคู่มือโทเค็นที่กำหนดเอง
// Get the current user's data const queryGetUserImpersonation = ` query getUser @auth(level: USER) { user(key: {uid_expr: "auth.uid"}) { id, name } }`; // Impersonate a user with the specified auth claims const optionsAuthenticated: GraphqlOptions<undefined> = { impersonate: { authClaims: { sub: 'QVBJcy5ndXJ1' } } }; // executeGraphql with impersonated authenticated user scope const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetUserImpersonation, optionsAuthenticated); // gqlResponse -> { "data": { "user": { "id": "QVBJcy5ndXJ1", "name": "Fred" } } }
จัดการข้อมูลสาธารณะด้วยเมธอด executeGraphql
คุณสามารถทำงานกับข้อมูลที่เข้าถึงได้แบบสาธารณะโดยใช้ SDK โดยการแอบอ้างเป็น ผู้ใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์
// Query to get posts, with authentication level PUBLIC const queryGetPostsImpersonation = ` query getPosts @auth(level: PUBLIC) { posts { description } }`; // Attempt to access data as an unauthenticated user const optionsUnauthenticated: GraphqlOptions<undefined> = { impersonate: { unauthenticated: true } }; // executeGraphql with impersonated unauthenticated user scope const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetPostsImpersonation, optionsUnauthenticated);
ดำเนินการกับข้อมูลแบบกลุ่ม
Firebase ขอแนะนำให้คุณใช้ Admin SDK สำหรับการดำเนินการข้อมูลแบบกลุ่มในฐานข้อมูลการผลิต
SDK มีเมธอดต่อไปนี้สำหรับการทำงานกับข้อมูลจำนวนมาก จากอาร์กิวเมนต์ที่ระบุ แต่ละเมธอดจะสร้างและเรียกใช้การเปลี่ยนแปลง GraphQL
// Methods of the bulk operations API // dc is a Data Connect admin instance from getDataConnect const resp = await dc.insert("movie" /*table name*/, data[0]); const resp = await dc.insertMany("movie" /*table name*/, data); const resp = await dc.upsert("movie" /*table name*/, data[0]); const resp = await dc.upsertMany("movie" /*table name*/, data);
หมายเหตุเกี่ยวกับประสิทธิภาพสำหรับการดำเนินการแบบกลุ่ม
คำขอแต่ละรายการที่ส่งไปยังแบ็กเอนด์จะทำให้เกิดการรับส่งข้อมูลไปยัง Cloud SQL 1 รอบ ดังนั้นยิ่งคุณส่งเป็นกลุ่มมากเท่าใด อัตราการส่งข้อมูลก็จะยิ่งสูงขึ้นเท่านั้น
อย่างไรก็ตาม ยิ่งขนาดกลุ่มใหญ่ขึ้น คำสั่ง SQL ที่สร้างขึ้นก็จะยิ่งยาวขึ้น เมื่อถึงขีดจำกัดความยาวของคำสั่ง SQL ของ PostgreSQL คุณจะพบข้อผิดพลาด
ในทางปฏิบัติ ให้ทดลองเพื่อหาขนาดกลุ่มที่เหมาะสมสำหรับภาระงานของคุณ
ขั้นตอนถัดไปคือ
- ดูข้อมูลเกี่ยวกับการเริ่มต้นใช้งานฐานข้อมูลด้วยข้อมูลโดยใช้ Admin SDK
- ดู API สำหรับ Admin SDK
- ใช้ Firebase CLI และคอนโซล Google Cloud สำหรับการดำเนินการจัดการโปรเจ็กต์อื่นๆ เช่น การจัดการสคีมาและตัวเชื่อมต่อ และการจัดการบริการและฐานข้อมูล