최근에 RESTful 인터페이스 사양을 배웠고 Postman을 사용하여 이를 소개했습니다. 관련 RESTful 인터페이스 사양은 다음과 같습니다. 1. RESTful이란 무엇입니까?
REST: 웹 서비스를 위한 아키텍처 스타일입니다. HTTP, URI, XML, JSON 및 HTML과 같이 널리 사용되는 표준과 프로토콜을 사용하며, 경량의 크로스 플랫폼 및 크로스 언어 아키텍처 디자인입니다. 스타일이 아니라 표준은 아이디어입니다.
RESTful: 해당 중국어는 REST입니다. Restful 웹 서비스는 REST 스타일을 준수하는 웹 서비스인 일반적인 REST 애플리케이션입니다. REST 웹 서비스는 일종의 ROA(Resource-Oriented Architecture) 아키텍처입니다. ) [추천 : 웹 프론트엔드]
RESTful의 본질은 소프트웨어 아키텍처 스타일이며, 핵심은 리소스 지향적이며 다음 문제를 해결합니다.
개발 복잡성 감소
시스템 확장성 향상
2. SOAP와 REST의 차이점:
SOAP(Simple Object Access Protocol): 데이터 교환을 위한 프로토콜 사양으로, 가볍고 간단한 XML 기반 프로토콜입니다.
REST(Representational State Transfer): 개발의 복잡성을 줄이고 시스템의 확장성을 향상시킬 수 있는 소프트웨어 아키텍처 스타일입니다.
효율성과 사용 편의성 :
SOAP : 다양한 요구로 인해 자체 프로토콜의 내용이 지속적으로 확장됨에 따라 SOAP 처리 성능이 저하되었습니다. 동시에 사용 편의성과 학습 비용도 증가했습니다.
RESTful : 리소스 중심의 인터페이스 설계 및 작업 추상화로 인해 개발자의 잘못된 설계를 단순화하고 HTTP의 원래 애플리케이션 프로토콜 설계 개념을 최대한 활용합니다.
보안 :
RESTful 은 리소스 기반 서비스 인터페이스에 매우 적합하며 특히 효율성은 높지만 보안 요구 사항은 낮은 시나리오에 적합합니다.
SOAP 의 성숙은 여러 개발 언어에 제공되어야 하고 더 높은 보안 요구 사항을 갖는 인터페이스 설계에 편의성을 가져올 수 있습니다.
요약하면:
보안 : SOAP는 REST보다 낫습니다.
효율성 및 사용 편의성 : REST가 더 좋습니다.
성숙도 : 일반적으로 SOAP는 성숙도 측면에서 REST보다 우수합니다.
3. RESTful API를 설계하는 방법 :
리소스 경로 : RESTful 아키텍처에서 각 URL은 리소스를 나타내므로 URL에는 동사가 포함될 수 없고 명사만 포함될 수 있습니다. 일반적으로 API의 명사는 복수형이어야 합니다.
HTTP 동사 : HTTP 동사(술어)로 표현되는 리소스(CURD)의 작업입니다.
GET: 서버에서 리소스(하나 이상의 항목)를 검색합니다.
POST: 서버에 새 리소스를 만듭니다.
PUT: 서버의 리소스를 업데이트합니다(클라이언트는 변경된 전체 리소스를 제공합니다).
DELETE: 서버에서 리소스를 삭제합니다.
동물원을 예로 들어보겠습니다(다양한 동물 및 직원에 대한 정보 포함).
https://api.example.com/v1/zoos //동물원 리소스 https://api.example.com/v1/animals //동물 리소스 https://api.example.com/v1/employees //직원 의지
POST /zoos: 새 동물원을 만듭니다.
GET /zoos/ID: 특정 동물원에 대한 정보를 가져옵니다.
PUT /zoos/ID: 지정된 동물원의 정보를 업데이트합니다.
DELETE /zoos/D: 동물원 삭제
필터 정보 :
?limit=10: 반환되는 레코드 수를 지정합니다.
?offset=10: 반환된 레코드의 시작 위치를 지정합니다.
?page=2&per_page=100: 페이지와 페이지당 레코드 수를 지정합니다.
?sortby=name&order=asc: 반환된 결과를 정렬할 속성과 정렬 순서를 지정합니다.
?animal_type_id=1: 필터 조건 지정
상태 코드 :
200(OK) - 기존 리소스가 변경된 경우
201(생성됨) - 새 리소스가 생성되는 경우
202(수락됨) - 처리 요청이 수락되었지만 완료되지 않았습니다(비동기 처리).
301(영구적으로 이동됨) - 리소스의 URI가 업데이트되었습니다.
303(기타 참조) - 기타(로드 밸런싱 등)
400(잘못된 요청) - 잘못된 요청을 나타냅니다.
404(찾을 수 없음) - 리소스가 존재하지 않습니다.
406(허용되지 않음) - 서버가 필요한 표현을 지원하지 않습니다.
409(충돌) - 일반 충돌
412(전제 조건 실패) - 전제 조건이 실패했습니다(예: 조건 업데이트 실행 시 충돌).
415(지원되지 않는 미디어 유형) - 수신된 표현이 지원되지 않습니다.
500(서버 내부 오류) - 일반 오류 응답
503(서비스를 사용할 수 없음) - 서비스가 현재 요청을 처리할 수 없습니다.
오류 처리 :
반환된 정보는 오류를 키 이름으로 사용하고 오류 정보를 키 값으로 사용합니다.
{ 오류: "잘못된 API 키" }
결과 반환 :
GET /collection: 리소스 개체의 목록(배열)을 반환합니다.
GET /collection/resource: 단일 리소스 객체를 반환합니다.
POST /collection: 새로 생성된 리소스 개체를 반환합니다.
PUT /collection/resource: 전체 리소스 객체를 반환합니다.
PATCH /collection/resource: 전체 리소스 개체를 반환합니다.
DELETE /collection/resource: 빈 문서를 반환합니다.
4.REST 스타일 인터페이스 테스트 프로세스 :
사진으로 직접 소개해보겠습니다.
5. 코드 작성 및 Postman 테스트 :
도구: 아이디어, mysql 데이터베이스, Postman
데이터베이스 테이블 데이터:
엔터티 클래스:
마스터 과정에 대한 프런트 엔드(vue) 항목: 학습 항목 입력
@데이터 @ApiModel("사용자 엔터티 클래스") 공개 클래스 사용자는 Model<User>를 확장하고 직렬화 가능 {을 구현합니다. @ApiModelProperty("사용자 ID") @NotNull(message = "사용자 ID는 비워둘 수 없습니다.") 개인 정수 ID; @NotBlank(message = "사용자 이름은 비워둘 수 없습니다.") @ApiModelProperty("사용자 이름") 개인 문자열 이름; @최소(1) @맥스(100) @ApiModelProperty("사용자 연령") 개인 정수 연령; @NotEmpty(message = "메일함은 비워둘 수 없습니다.") @ApiModelProperty("사용자 이메일") @이메일 개인 문자열 이메일; @ApiModelProperty("0: 삭제되지 않음 1: 삭제됨") @TableLogic 개인 정수가 삭제되었습니다. @NotBlank(message = "비밀번호는 비워둘 수 없습니다.") @ApiModelProperty("사용자 비밀번호") 개인 문자열 비밀번호; }
컨트롤러 계층 코드(서비스 계층 생략):
@Api(tags = "사용자 관리") @RestController @RequestMapping("/내 웹사이트/사용자") 공개 클래스 UserController { @Autowired 개인 UserServiceImpl userServiceimpl; @ApiOperation(값 = "새 사용자") @PostMapping 공개 int insertUser(사용자 사용자) { System.out.println("추가 성공"); return userServiceimpl.insertUser(user); } @ApiOperation(value = "사용자 정보 수정") @PutMapping 공개 무효 updateUser(@RequestBody @Valid 사용자 사용자) { userServiceimpl.updateUser(사용자); System.out.println("수정 성공"); } @ApiOperation(value = "사용자 삭제", Notes = "ID를 기준으로 사용자 삭제") @DeleteMapping("/{id}") public int deleteUser(@ApiParam("user id") @PathVariable @Valid Integer id) { System.out.println("삭제 성공"); userServiceimpl.deleteUser(id)를 반환합니다. } @ApiOperation(value = "모든 사용자 쿼리") @GetMapping 공개 목록<사용자> allUser() { System.out.println("쿼리 성공"); userServiceimpl.allUser()를 반환합니다. } @ApiOperation(value = "id 쿼리 사용자") @GetMapping("/{id}") 공개 사용자 selectById(@PathVariable("id") 문자열 id) { userServiceimpl.selectById(id)를 반환합니다. } }
Postman을 사용하여 테스트합니다(URL 경로가 일치해야 함).
모든 사용자 쿼리 : http://localhost:8081/MyWebsite/user
헤더: Content-Type=application/json
본체: 비어 있음
쿼리 성공!
ID 기반 쿼리:
쿼리 성공!
새 사용자 추가 :
데이터베이스가 성공적으로 추가되었는지 확인하세요!
사용자 정보 수정 (ID 7로 이름 및 나이 수정):
데이터베이스 수정이 성공했는지 확인하세요!
ID를 기준으로 사용자 삭제 :
데이터베이스가 성공적으로 삭제되었는지 확인하세요! (삭제=1)
어쩌면 전체 데이터를 직접 삭제했을 수도 있습니다.
존재하지 않는 데이터(또는 잘못된 데이터)를 쿼리하거나 업데이트하거나 삭제하는 경우 실행이 실패합니다. 모든 인터페이스를 삭제하는 등의 다른 인터페이스가 있습니다. 여기서는 하나씩 테스트하지 않았습니다. 오류가 있는 경우. 그들을 지적하십시오.
위는 Restful 인터페이스 사양과 Postman 디버깅 도구에 대한 자세한 소개입니다!