LowCode (Mendix) Advanced/Design and Publish a REST API

Methods

Caryou 2024. 10. 21. 11:24

학습 목표

이 모듈을 마치면 다음을 수행 할 수 있습니다.

  • REST API가 무엇인지 설명
  • REST 메소드 분류 방법 설명
  • 다양한 REST API 메소드 구분

REST API란 무엇입니까?

API(Application Programming Interface)는 두 개의 애플리케이션 또는 소프트웨어 시스템이 일련의 정의 및 프로토콜을 사용하여 서로 통신할 수 있도록 하는 메커니즘입니다. 예를 들어 휴대전화의 날씨 앱은 API를 통해 기상청의 소프트웨어 시스템과 통신하여 휴대전화에 날씨 업데이트를 표시할 수 있습니다.

 

다양한 "유형"의 API, 다양한 스타일 또는 프로토콜이 있습니다. 가장 잘 알려진 것은 다음과 같습니다.

 

  • SOAP - 이 유형의 API는 Simple Object Access Protocol을 사용합니다. 클라이언트와 서버는 XML을 사용하여 메시지를 교환합니다. 이것은 과거에 더 인기가 있었던 덜 유연한 API입니다. 유연성이 떨어지는 것도 장점이 있습니다. 보다 엄격하고 통제적이기 때문에 메시지가 실제로 특정 규칙을 따라야 할 때(예: 급여 지불을 담당하는 시스템 업데이트와 관련된 경우) 자주 사용됩니다.
  • Websocket API - JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. WebSocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버는 연결된 클라이언트에 콜백 메시지를 보낼 수 있으므로 REST API보다 효율적입니다.
  • REST - 매우 유연하기 때문에 매우 인기 있는 프로토콜입니다.

REST

REST(Representational State Transfer) 아키텍처 스타일의 디자인 원칙을 준수하는 API입니다. 이러한 이유로 REST API는 RESTful API라고도 합니다.

Mendix를 사용하여 REST API를 게시하거나 사용하기 위해 이 아키텍처 스타일의 모든 세부 정보를 완전히 이해할 필요는 없습니다. REST API는 HTTP 요청을 통해 통신하여 리소스 내에서 레코드 생성, 읽기, 업데이트 및 삭제(CRUD라고도 함)와 같은 표준 데이터베이스 기능을 수행합니다. 이러한 CRUD 데이터베이스 함수는 REST 내에서 메서드라고 부르며  safe and/or idempotent 으로 분류할 수 있습니다.

 

Safe : 메서드가 완료된 후 시스템 상태가 변경되지 않습니다.

Idempotent : 여러 개의 동일한 요청의 효과는 단일 요청과 동일합니다.

[ 그림 1 ]

GET 메소드는 하나 또는 여러 객체를 포함하는 목록을 반환하거나 아무 것도 반환하지 않습니다. 사용자가 GET 메서드를 호출할 때 값을 변경해서는 안 됩니다. 요청이 반복될 때마다 결과가 항상 동일하기 때문에 멱등원( Idempotent )으로 간주됩니다. 그리고 데이터를 변경하지 않기 때문에 안전합니다.

 

POST 메소드는 안전하지도 않고 멱등원( Idempotent )도 아닙니다. 새 개체를 생성하기 때문에 안전하지 않으므로 시스템 상태가 변경됩니다. 그리고 매번 새로운 객체가 생성되기 때문에 여러 요청의 효과가 동일하지 않기 때문에 멱등원이 아닙니다.

 

이것을 올바르게 구현하는 것은 개발자에게 달려 있습니다! 안전하지 않거나 멱등원이 아닌 GET 메소드를 만들 수 있는데, 이는 나쁜 습관입니다.

 

 

 

 

GET

리소스 또는 리소스 컬렉션에서 GET 메서드를 사용하여 정보를 검색할 수 있습니다. 특정 리소스를 가져오거나, 리소스 컬렉션의 일부를 가져오거나, 리소스 컬렉션을 검색하기 위해 이 작업을 수행할 수 있습니다.

 

몇 가지 예를 들어 이것을 덜 추상적으로 만들어 보겠습니다.

 

서점에서 구할 수 있는 모든 책을 검색하려고 한다고 가정해 보겠습니다. 이를 위해 리소스에서 GET 메소드를 사용합니다. 반환되는 책이 많기 때문에 url 쿼리 매개변수로 추가되는 category=fantasy와 같은 몇 가지 필터를 적용하려고 합니다.

 

/books?category=fantasy&language=ko

 

고유 식별자를 기반으로 단일 리소스를 검색할 때는 쿼리 매개 변수 대신 path 매개 변수를 사용합니다. 그러니 이렇게 하는 대신: /books?id=100034 이걸로 : /books/100034

 

path 매개 변수를 기반으로 하는 단일 리소스가 없으면 404 찾을 수 없음 메시지가 반환되어야 합니다.

[ 그림 2 ]

쿼리 매개변수를 사용한 GET 작업

[ 그림 3 ]

마이크로플로우 PRSBookGetAll

[ 그림 4 ]
[ 그림 5 ]

마이크로플로우 PRSBookGetSingle

 

 

 

 

 

 

POST

POST 메서드를 사용하여 새 객체를 만들 수 있습니다. POST 메서드는 다음 지침을 따라야 합니다.

  • POST 요청은 리소스 수집 엔드포인트로 전송되어야 합니다.
  • 성공적인 POST 요청은 201 상태 코드와 함께 응답을 반환해야 합니다.
  • 성공적인 POST 요청의 응답에는 본문에 객체가 포함되어야 하며, 시스템에서 검색할 수 있는 식별자도 포함되어야 합니다.

[ 그림 6 ]

POST 작업

[ 그림 7 ]

마이크로플로우 PRSBookPost

 

 

PUT

PUT 메서드를 사용하여 객체를 업데이트할 수 있습니다. PUT 요청에는 객체의 새 상태가 포함됩니다. PUT 요청에서 누락된 필드는 비어 있는 것으로 간주됩니다. 적절한 PUT 메서드는 다음 지침을 따릅니다.

  • PUT 요청은 단일 객체를 식별해야 합니다(PUT 메서드는 다른 시스템도 식별자를 소유하지 않는 한 새 객체를 생성해서는 안 됩니다)
  • 수행해야 할 업데이트는 PUT 요청 본문에 있어야 합니다(예: 쿼리 매개변수에 포함되어서는 안 됨).
  • PUT 요청 후 객체는 PUT 요청 본문에서 요청한 대로 정확히 존재합니다.
  • PUT 요청은 객체 식별자를 변경해서는 안 됩니다(다른 시스템이 식별자를 소유하지 않는 한)
  • 성공적인 PUT 요청의 응답에는 200 상태 코드가 있으며 본문에 개체가 포함됩니다.

아래에서 책에 대한 데이터를 업데이트하는 PUT 메서드의 예를 볼 수 있습니다. POST 메시지와 동일한 본문을 사용할 수 있습니다.

[ 그림 8 ]

PUT 작업

[ 그림 9 ]

마이크로플로우 PRSBookPut

 

누락된 필드는 비워두세요

기본적으로 Mendix는 속성을 빈 값으로 덮어쓰지 않습니다. find by key 대신 retrieve by microflow 를 사용하여 import 매핑을 사용하여 이를 구현할 수 있습니다 . microflow는 다음을 수행해야 합니다.

  1. 물건을 회수합니다.
  2. 변경 개체 활동을 사용하여 매핑된 모든 속성을 비워둡니다.
  3. 객체를 반환합니다.

그러면 매핑은 지정된 모든 속성을 올바른 값으로 설정합니다.

[ 그림 10 ]

매핑 가져오기 BookImportPUT

[ 그림 11 ]

마이크로플로우 BookGetByMicroflow

 

 

PATCH

PATCH 메서드를 사용하여 객체를 업데이트하거나 작업을 시작할 수 있습니다. PATCH와 PUT 메서드의 차이점은 PATCH 메서드는 지정된 필드만 업데이트한다는 것입니다. PATCH 요청에서 누락된 모든 필드는 현재 값을 유지하는 반면, PUT에서는 빈 필드가 비어 있다고 가정합니다. PATCH 메서드를 사용하여 객체를 업데이트할 때는 다음 지침을 따라야 합니다.

  • PATCH 요청은 단일 개체와 함께 작동합니다.
  • 업데이트는 PATCH 요청 본문에 있어야 합니다(예: 쿼리 매개변수에 없어야 함)
  • PATCH 요청 후에는 변경된 값만 PATCH 요청 본문에 포함됩니다.
  • PATCH 요청은 객체 식별자를 변경하지 않습니다.
  • PATCH 요청이 성공하면 200 상태 코드가 반환되고 본문에 객체가 포함됩니다.

아래는 책에 대한 정보를 업데이트하기 위한 PATCH 메서드의 예입니다. PUT 메서드와의 유일한 차이점은 구현입니다. PATCH 메서드는 빈 값으로 필드를 덮어쓰고 싶지 않을 때 사용됩니다.

[ 그림 12 ]

패치 작업

[ 그림 13 ]

마이크로플로우 PRSBookPatch

PATCH 메서드를 액션 컨트롤러로 사용하는 경우 어떤 특정 지침도 따를 필요가 없습니다.

 

 

 

Delete

객체를 삭제하려면 DELETE 메서드를 사용할 수 있습니다. DELETE 메서드는 다음 지침을 따라야 합니다.

  • DELETE 요청은 단일 객체를 식별합니다.
  • DELETE 요청이 성공하면 204 상태 코드와 콘텐츠가 반환됩니다.

[ 그림 14 ]

패치 작업

[ 그림 15 ]

 

HEAD

HEAD 방법은 GET 요청과 동일한 응답을 요청하지만 응답 본문은 없습니다. 이 방법은 종종 하이퍼텍스트 링크의 유효성, 접근성 및 최근 수정 사항을 테스트하는 데 사용됩니다. 이 방법은 일반적으로 무시할 수 있습니다.

옵션

OPTIONS 메서드를 사용하여 리소스 컬렉션에 구현된 메서드를 검색할 수 있습니다. CORS [2]에 필요한 경우를 제외하고는 OPTIONS 메서드를 구현할 필요가 없습니다. OPTIONS 메서드를 구현하는 경우 다음 지침을 준수해야 합니다.

  • OPTIONS 요청은 리소스 컬렉션으로 전송됩니다.
  • 성공적인 OPTIONS 요청의 응답은 204 상태 코드와 콘텐츠 없음을 반환합니다. 또한 Access-Control-Allow-Origin, Access-Allow-Control-Methods, Access-Control-Allow-Headers를 포함한 헤더에 필요한 정보를 제공해야 합니다.

 

 

출처 : https://academy.mendix.com/link/paths/133/Design-and-Publish-a-REST-API

'LowCode (Mendix) Advanced > Design and Publish a REST API' 카테고리의 다른 글

Security  (0) 2024.10.21
Documentation  (0) 2024.10.21
Create Responses & Messages  (0) 2024.10.21