63 lines
1.4 KiB
Markdown
63 lines
1.4 KiB
Markdown
# Kratos Admin Template
|
|
|
|
## Best Practice
|
|
Google AIP(https://google.aip.dev/general):
|
|
1. Resource-oriented design
|
|
2. Filtering
|
|
3. Pagination
|
|
4. Field masks
|
|
5. Field behavior
|
|
|
|
## Generate API files
|
|
```shell
|
|
# Download and update dependencies
|
|
make init
|
|
# Generate API files (include: pb.go, http, grpc, validate, swagger, index.ts) by proto file
|
|
make api
|
|
```
|
|
|
|
## Run Web Application
|
|
```shell
|
|
# Enter web directory, install dependencies and start development server
|
|
cd web
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
The generated clients work with any Promise-based HTTP client that returns JSON.
|
|
Services are defined and re-exported from this file: `web/src/services/index.ts`.
|
|
```typescript
|
|
import { createAdminServiceClient } from "@/services/kratos/admin/v1/index";
|
|
|
|
type Request = {
|
|
path: string;
|
|
method: string;
|
|
body: string | null;
|
|
};
|
|
|
|
function requestHandler({ path, method, body }: Request) { ... }
|
|
|
|
export function createAdminService() {
|
|
return createAdminServiceClient(requestHandler);
|
|
}
|
|
```
|
|
|
|
Example using the generated client:
|
|
```typescript
|
|
import { createAdminService } from "@/services/index";
|
|
|
|
const adminService = createAdminService();
|
|
|
|
const handleLogin = async (username: string, password: string) => {
|
|
try {
|
|
const response = await adminService.Login({
|
|
username: username,
|
|
password: password,
|
|
});
|
|
console.log("Login successful:", response);
|
|
} catch (error) {
|
|
console.error("Login failed:", error);
|
|
}
|
|
};
|
|
```
|