一、实验目的
1、通过安装使用Postman发送请求测试API,了解网络请求的定义以及网络请求的基本步骤;
2、掌握通过Java程序来访问第三方API。
二、实验学时
2学时
三、实验类型
验证性
四、实验需求
1、硬件
每人配备计算机1台,建议优先使用个人计算机开展实验。
2、软件
安装Postman,用于API测试。
安装IntelliJ IDEA,以及Java运行所需要的相关基础环境。
3、网络
本地主机能够访问互联网和实验中心网络。
4、工具
无。
五、实验任务
1、在本地电脑上下载安装Postman工具;
2、通过Postman工具发送请求来测试API;
3、编写一段Java程序,通过该程序来访问上一步任务中所请求的API地址;
4、验证通过不同方式来发送请求,服务器端返回的结果是否符合预期。
六、实验内容及步骤
1、安装Postman
- Postman安装程序可通过以下地址进行下载(根据不同的操作系统下载不同的安装包)。
- 执行安装程序并依照向导完成软件安装。
2、通过Postman工具发送请求来测试API
- 验证不带参数的POST请求
-
- 请求内容:该API返回检查项目以及执行科室列表
- 请求地址:http://123.56.60.184:8888/examine
- 请求方式:POST
- 入参:无
- 出参示例:
{
"inputDrugLists": [
{
"EXAM_SUBCLASS_NAME": "妇科门诊",
"chander": [
{
"DEPT_NAME": "妇科门诊",
"EXAM_SUBCLASS_NAME": "妇科彩超",
"SERIAL_NO": 1,
"DEPT_CODE": "2020"
},
{
"DEPT_NAME": "妇科门诊",
"EXAM_SUBCLASS_NAME": "心电图",
"SERIAL_NO": 2,
"DEPT_CODE": "2020"
}
]
},
{
"EXAM_SUBCLASS_NAME": "16排CT",
"chander": [
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "腹部",
"SERIAL_NO": 4,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "公共",
"SERIAL_NO": 7,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "颈部",
"SERIAL_NO": 1,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "四肢",
"SERIAL_NO": 6,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "头颅",
"SERIAL_NO": 2,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "胸部",
"SERIAL_NO": 3,
"DEPT_CODE": "3010"
},
{
"DEPT_NAME": "16排CT室",
"EXAM_SUBCLASS_NAME": "腰、骶",
"SERIAL_NO": 5,
"DEPT_CODE": "3010"
}
]
},
{
"EXAM_SUBCLASS_NAME": "彩超",
"chander": [
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "产科彩超",
"SERIAL_NO": 13,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "腹部脏器",
"SERIAL_NO": 3,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "公共",
"SERIAL_NO": 1,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "浅表器官",
"SERIAL_NO": 4,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "心脏彩超",
"SERIAL_NO": 14,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "血管彩超",
"SERIAL_NO": 2,
"DEPT_CODE": "3003"
},
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "子宫附件",
"SERIAL_NO": 12,
"DEPT_CODE": "3003"
}
]
},
{
"EXAM_SUBCLASS_NAME": "心电图",
"chander": [
{
"DEPT_NAME": "彩超室",
"EXAM_SUBCLASS_NAME": "心电图",
"SERIAL_NO": 1,
"DEPT_CODE": "3003"
}
]
},
{
"EXAM_SUBCLASS_NAME": "DR",
"chander": [
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "尺桡骨",
"SERIAL_NO": 12,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "腹部",
"SERIAL_NO": 4,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "跟骨",
"SERIAL_NO": 22,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "骨盆",
"SERIAL_NO": 8,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "股骨",
"SERIAL_NO": 17,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "肩关节",
"SERIAL_NO": 9,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "脚",
"SERIAL_NO": 21,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "颈椎",
"SERIAL_NO": 2,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "手",
"SERIAL_NO": 14,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "锁骨",
"SERIAL_NO": 23,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "头部",
"SERIAL_NO": 1,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "腕关节",
"SERIAL_NO": 13,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "膝关节",
"SERIAL_NO": 18,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "胸部",
"SERIAL_NO": 3,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "胸椎",
"SERIAL_NO": 5,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "腰椎",
"SERIAL_NO": 6,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "肘关节",
"SERIAL_NO": 11,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "子宫造影",
"SERIAL_NO": 24,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "肱骨",
"SERIAL_NO": 10,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "胫腓骨",
"SERIAL_NO": 19,
"DEPT_CODE": "3001"
},
{
"DEPT_NAME": "放射科1",
"EXAM_SUBCLASS_NAME": "踝关节",
"SERIAL_NO": 20,
"DEPT_CODE": "3001"
}
]
},
{
"EXAM_SUBCLASS_NAME": "MRI",
"chander": [
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "颈椎",
"SERIAL_NO": 7,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "头颅",
"SERIAL_NO": 1,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "膝关节",
"SERIAL_NO": 8,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "下肢",
"SERIAL_NO": 6,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "胸",
"SERIAL_NO": 3,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "腰、骶",
"SERIAL_NO": 2,
"DEPT_CODE": "3009"
},
{
"DEPT_NAME": "核磁共振",
"EXAM_SUBCLASS_NAME": "髋",
"SERIAL_NO": 4,
"DEPT_CODE": "3009"
}
]
},
{
"EXAM_SUBCLASS_NAME": "胃肠镜",
"chander": [
{
"DEPT_NAME": "胃镜室",
"EXAM_SUBCLASS_NAME": "14碳",
"SERIAL_NO": 2,
"DEPT_CODE": "3007"
},
{
"DEPT_NAME": "胃镜室",
"EXAM_SUBCLASS_NAME": "公共",
"SERIAL_NO": 1,
"DEPT_CODE": "3007"
}
]
},
{
"EXAM_SUBCLASS_NAME": "常规体检",
"chander": [
{
"DEPT_NAME": "急诊科",
"EXAM_SUBCLASS_NAME": "健康证体检",
"SERIAL_NO": 1,
"DEPT_CODE": "2001"
}
]
}
],
"resultCode": "0",
"resultDesc": "查询成功"
}
-
- 操作步骤
- 验证带参数的POST请求
-
- 请求内容:该API返回某一个检查项目分组下具体的检查项目列表
- 请求地址:http://123.56.60.184:8888/examRptPattern
- 请求方式:POST
- 入参示例:
{
"ExamClass": "彩超",
"ExamSubClass": "血管彩超"
}
-
- 出参示例:
{
"inputDrugLists": [
{
"DESCRIPTION_CODE": "CCSZYD001",
"PRICE": 108.3,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "左上肢血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 108.3,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCSZYD003",
"PRICE": 108.3,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "右上肢血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 108.3,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "220400002",
"PRICE": 40.5,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "四肢多普勒血流图",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 40.5,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCSZYD002",
"PRICE": 108.3,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "左下肢血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 108.3,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCHK00022",
"PRICE": 216.6,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "双上肢静脉彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 216.6,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCHK00021",
"PRICE": 216.6,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "双上肢动脉彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 216.6,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCHK00023",
"PRICE": 216.6,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "双下肢动脉彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 216.6,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCHK00025",
"PRICE": 135.4,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "颈部血管",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 135.4,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCSZYD0012",
"PRICE": 108.3,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "四肢血管彩超(单肢)",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 108.3,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCHK00024",
"PRICE": 216.6,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "双下肢静脉彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 216.6,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCSZYD004",
"PRICE": 108.3,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "右下肢血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 108.3,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCFBYD0008",
"PRICE": 90,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "腹部大血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 90,
"EXAM_SUB_CLASS": "血管彩超"
},
{
"DESCRIPTION_CODE": "CCSSYD0006",
"PRICE": 117,
"CLINIC_ITEM_CLASS": "D",
"DESCRIPTION": "双肾及肾血管彩超",
"EXAM_CLASS": "彩超",
"PERFORM_BY": "3003",
"CHARGES": 117,
"EXAM_SUB_CLASS": "血管彩超"
}
],
"resultCode": "0",
"resultDesc": "查询成功"
}
-
- 操作步骤
3、编写一段Java程序来发送Http请求访问上一步任务中的API地址
- 以下示例代码中模拟了客户端发送请求并打印输出返回结果,该示例中使用的为Java8版本,Java11及以上版本也可引用HttpClient所封装好的方法来实现,或者引用其他第三方如org.apache.http也可以。
- 该示例代码中引用了JSONObject,需要在项目pom.xml文件中进行配置。
import org.json.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class HttpDemo {
public static void main(String[] args) throws IOException {
// 创建HttpURLConnection对象
// http://123.56.60.184:8888/examine
// http://123.56.60.184:8888/examRptPattern
String url = "http://123.56.60.184:8888/examine";
URL obj = new URL(url);
// 打开连接
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// 设置请求方法为POST
con.setRequestMethod("POST");
// 设置请求头
con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
con.setRequestProperty("Accept", "application/json");
// 设置请求体
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("ExamClass", "彩超");
// jsonObject.put("ExamSubClass", "血管彩超");
// String jsonData = jsonObject.toString();
// byte[] postDataJson = jsonData.getBytes(StandardCharsets.UTF_8);
// 发送POST请求并获取返回数据
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.write(postDataJson);
wr.flush();
wr.close();
// 获取响应码
int responseCode = con.getResponseCode();
System.out.println("\n发送'POST'请求到: " + url);
System.out.println("Post请求入参: " + jsonObject);
System.out.println("出参: " + responseCode);
// 读取服务器返回的数据
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
// 关闭连接
in.close();
// 打印结果
System.out.println(response.toString());
}
}
- 观察打印输出的出参结果是否与Postman测试的结果一致。
七、实验考核
本实验考核采用【实验随堂查】方式开展。
每个实验完成后,在实验课上通过现场演示的方式向实验指导教师进行汇报,并完成现场问答交流。
每个实验考核满分100分,其中实验成果汇报60分,现场提问交流40分。
实验考核流程:
(1)学生演示汇报实验内容的完成情况,实验指导老师现场打分。
(2)指导老师结合实验内容进行提问,每位学生提问2-3个问题,根据回答的情况现场打分。
(3)实验考核结束后,进行公布成绩。