Rumah >hujung hadapan web >tutorial js >Mengapa Anda Harus Mengelak Kaedah Utiliti dalam Penyelesai GraphQL
GraphQL telah merevolusikan cara kami mengambil dan membentuk data, menyediakan lapisan abstraksi yang bersih antara pelanggan dan pelayan. Salah satu ciri terasnya, penyelesai, membolehkan kami menentukan cara setiap medan dalam skema kami mendapat datanya. Dalam sesetengah kes, pembangun mungkin secara tidak sengaja mengurangkan faedah GraphQL dengan bergantung pada kaedah utiliti dalam penyelesai. Amalan ini bukan sahaja mengalahkan tujuan reka bentuk GraphQL tetapi juga memperkenalkan kerumitan yang tidak perlu dan potensi pepijat.
Mari kita mendalami mengapa ini bermasalah dan cara untuk melakukan yang lebih baik.
Dalam GraphQL, penyelesai digunakan untuk setiap contoh jenis, tidak kira di mana jenis itu muncul dalam skema anda. Abstraksi ini memastikan bahawa logik untuk menyelesaikan data kekal konsisten di seluruh papan. Contohnya:
schema { query: Query } type Query { project(id: ID!): Project user(id: ID!): User } type Project { id: ID! name: String! owner: User! } type User { id: ID! name: String! email: String! }
Di sini, jenis Pengguna digunakan di dua tempat: terus dalam Pertanyaan untuk mengambil pengguna dan bersarang dalam jenis Projek sebagai pemilik. Terima kasih kepada sistem penyelesai GraphQL, kami boleh menentukan penyelesai Pengguna tunggal untuk mengendalikan cara medan Pengguna diselesaikan, memastikan tingkah laku yang konsisten di mana-mana Pengguna muncul.
Apabila anda memperkenalkan kaedah utiliti untuk membentuk data di luar penyelesai anda, anda memecahkan abstraksi ini. Pertimbangkan contoh ini:
// utils.ts function mapToUser(userData: DataSourceUser) { return { id: userData.id, name: userData.full_name, email: userData.contact_email, }; } // resolvers.ts const resolvers: Resolvers<Context> = { Query: { project: async (_, { id }, { dataSources }) => { const project = await dataSources.projectAPI.getProject(id); return { ...project, owner: mapToUser(project.owner), // Utility method called here }; }, user: async (_, { id }, { dataSources }) => { const user = await dataSources.userAPI.getUser(id); return mapToUser(user); // Utility method called here }, }, };
Pada pandangan pertama, ini mungkin kelihatan baik. Tetapi inilah sebabnya ia bermasalah:
Anda terpaksa memanggil mapToUser dalam setiap penyelesai tempat jenis Pengguna muncul. Terlupa untuk memanggilnya atau memanggilnya secara salah boleh menyebabkan gelagat tidak konsisten merentas API anda.
Sistem penyelesai GraphQL direka untuk memusatkan cara setiap jenis diselesaikan. Dengan menggunakan kaedah utiliti, anda mengetepikan ciri ini dan menjadikan kod anda kurang intuitif.
Jika anda perlu mengubah suai cara jenis Pengguna diselesaikan (cth., menambah medan baharu atau mengendalikan ralat), anda perlu memburu setiap tempat di mana mapToUser dipanggil dan bukannya mengemas kini penyelesai tunggal.
Daripada menggunakan kaedah utiliti, tentukan penyelesai untuk jenis GraphQL anda. Begini cara anda boleh menulis semula contoh di atas:
schema { query: Query } type Query { project(id: ID!): Project user(id: ID!): User } type Project { id: ID! name: String! owner: User! } type User { id: ID! name: String! email: String! }
Menggunakan kaedah utiliti dalam penyelesai anda mungkin kelihatan seperti jalan pintas, tetapi ia akhirnya menjejaskan kuasa dan keanggunan GraphQL. Dengan menentukan penyelesai untuk jenis anda, anda boleh mengekalkan API yang bersih, konsisten dan berskala. Jadi berhenti menggunakan util dalam penyelesai anda dan terima abstraksi yang disediakan oleh GraphQL—diri masa depan anda akan berterima kasih!
Atas ialah kandungan terperinci Mengapa Anda Harus Mengelak Kaedah Utiliti dalam Penyelesai GraphQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!