createApi định nghĩa toàn bộ endpoint cho một base URL. baseQuery (thường fetchBaseQuery({ baseUrl: '/api' })) quyết định cách gọi API và có thể custom để thêm auth header hoặc xử lý refresh token.
ts
export const api = createApi({
reducerPath: 'api',
baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
tagTypes: ['User'],
endpoints: (builder) => ({
getUsers: builder.query({
query: () => '/users',
providesTags: ['User'],
}),
addUser: builder.mutation({
query: (body) => ({ url: '/users', method: 'POST', body }),
invalidatesTags: ['User'],
}),
}),
})
export const { useGetUsersQuery, useAddUserMutation } = api- Mỗi endpoint là query (GET) hoặc mutation (POST/PUT/DELETE) và tự sinh hook:
getUsers→useGetUsersQuery(),addUser→useAddUserMutation(). - Cache invalidation chạy bằng tag: mutation
invalidatesTags: ['User']khiến mọi queryprovidesTags: ['User']refetch — thêm user xong thì danh sách tự cập nhật.
Lưu ý: mỗi base URL chỉ nên có MỘT createApi; tách endpoint ra nhiều file bằng injectEndpoints.