面试题答案
一键面试#!/bin/bash
# 全局变量
API_BASE_URL="http://api.user.com"
CONCURRENCY=5 # 并发请求数量
PAGE_SIZE=100 # 每页数据量
# 创建用户函数
create_user() {
local user_info=$1
local id=$(echo $user_info | cut -d',' -f1)
local name=$(echo $user_info | cut -d',' -f2)
local email=$(echo $user_info | cut -d',' -f3)
local payload="{\"id\":\"$id\",\"name\":\"$name\",\"email\":\"$email\"}"
curl -s -X POST -H "Content-Type: application/json" -d "$payload" "$API_BASE_URL/users" > /dev/null
if [ $? -eq 0 ]; then
echo "User $name created successfully"
else
echo "Failed to create user $name"
fi
}
# 更新用户函数
update_user() {
local user_info=$1
local id=$(echo $user_info | cut -d',' -f1)
local name=$(echo $user_info | cut -d',' -f2)
local email=$(echo $user_info | cut -d',' -f3)
local payload="{\"name\":\"$name\",\"email\":\"$email\"}"
curl -s -X PUT -H "Content-Type: application/json" -d "$payload" "$API_BASE_URL/users/$id" > /dev/null
if [ $? -eq 0 ]; then
echo "User $name updated successfully"
else
echo "Failed to update user $name"
fi
}
# 获取用户列表函数
get_users() {
local page=1
local total_pages=1
while [ $page -le $total_pages ]; do
local response=$(curl -s "$API_BASE_URL/users?page=$page&limit=$PAGE_SIZE")
local current_page=$(echo $response | jq -r '.page')
total_pages=$(echo $response | jq -r '.total_pages')
# 处理当前页数据
echo $response | jq -r '.users[] | [.id, .name, .email] | @csv'
page=$((page + 1))
done
}
# 从CSV文件读取用户信息并创建/更新用户
while IFS=, read -r id name email; do
create_user "$id,$name,$email"
update_user "$id,$name,$email"
done < users.csv
# 获取用户列表
get_users
-
脚本说明:
- 全局变量部分:定义了API的基础URL,并发请求数量
CONCURRENCY
和每页数据量PAGE_SIZE
。 - 函数部分:
create_user
函数从CSV文件中解析出用户信息,构造JSON格式的请求体,使用curl
命令发送POST请求创建用户。update_user
函数类似,不过发送的是PUT请求来更新用户信息。get_users
函数通过curl
获取用户列表,根据API返回的信息进行分页处理,并使用jq
工具处理JSON数据。
- 主逻辑部分:
- 使用
while IFS=, read -r id name email
从users.csv
文件逐行读取用户信息,调用create_user
和update_user
函数。 - 最后调用
get_users
函数获取并处理用户列表。
- 使用
- 全局变量部分:定义了API的基础URL,并发请求数量
-
扩展性考虑:
- 每个API接口的操作封装在独立的函数中,若需要增加新的API接口功能,可新增类似的函数,并在主逻辑中适当调用,减少对已有代码的改动。
- 全局变量的设置方便调整API的基本配置以及性能相关参数,以适应不同的API需求。