RESTful 웹 서비스 튜토리얼: REST API 예제
⚡ 스마트 요약
RESTful 웹 서비스는 표준 HTTP 동사를 사용하여 애플리케이션이 HTTP를 통해 데이터를 교환할 수 있는 경량의 상태 비저장 방식을 제공합니다. 이러한 서비스는 깔끔한 인터페이스를 통해 리소스를 노출합니다. URL이를 통해 분산된 클라이언트, 서버, 모바일 장치 및 최신 클라우드 및 AI 플랫폼 간에 확장 가능하고 플랫폼에 독립적인 통신이 가능해집니다.
Restful 웹 서비스란 무엇입니까?
편안한 웹 서비스 RESTful 웹 서비스는 REST 아키텍처를 기반으로 구축된 경량화, 유지보수 용이성 및 확장성을 갖춘 서비스입니다. RESTful 웹 서비스는 애플리케이션의 API를 안전하고 균일하며 상태 비저장 방식으로 호출하는 클라이언트에 노출합니다. 호출하는 클라이언트는 RESTful 서비스를 사용하여 미리 정의된 작업을 수행할 수 있습니다. REST의 기본 프로토콜은 HTTP이며, REST는 REpresentational State Transfer의 약자입니다.
간단히 말해, REST는 문서, 이미지, 데이터베이스 레코드와 같은 리소스를 웹 상에서 생성, 읽기, 업데이트 및 삭제하는 표준 방식을 정의합니다. 일반 HTTP 프로토콜을 사용하기 때문에 거의 모든 프로그래밍 언어나 기기에서 특별한 도구 없이 RESTful 서비스를 이용할 수 있습니다.
RESTful 웹 서비스를 사용하는 이유는 무엇일까요?
기술적인 세부 사항을 살펴보기 전에 REST가 왜 그렇게 인기를 얻게 되었는지 이해하는 것이 도움이 됩니다. RESTful 웹 서비스는 다음과 같은 이유로 주목받게 되었습니다.
1. 이기종 언어 및 환경 – 이것은 근본적인 이유 중 하나이며, 우리가 이미 살펴본 바와 같습니다. SOAP 뿐만 아니라.
- 이 기능은 서로 다른 프로그래밍 언어로 구축된 웹 애플리케이션들이 서로 통신할 수 있도록 해줍니다.
- RESTful 서비스를 이용하면 이러한 웹 애플리케이션은 다양한 환경에서 실행될 수 있습니다. 예를 들어, 일부는 로컬 환경이나 웹 서버에 있을 수 있습니다. Windows, 다른 것들은 Linux에 있을 수 있습니다.
결론적으로, 환경이 어떻든 결과는 항상 동일해야 합니다. 즉, 애플리케이션들이 서로 통신할 수 있어야 한다는 것입니다. RESTful 웹 서비스는 다양한 프로그래밍 언어와 플랫폼으로 구축된 애플리케이션에 이러한 유연성을 제공합니다.
아래 그림은 페이스북, 트위터 등 다른 애플리케이션과 통신해야 하는 웹 애플리케이션의 예시를 보여줍니다. Google.
클라이언트 애플리케이션이 페이스북이나 트위터 같은 사이트와 연동해야 한다면, 개발자는 일반적으로 해당 사이트들이 어떤 언어와 플랫폼으로 구축되었는지 알아야 합니다. 이를 바탕으로 인터페이스 코드를 작성할 수 있지만, 이러한 방식은 유지보수 측면에서 매우 어려울 수 있습니다.
대신 페이스북, 트위터, Google 이러한 기능들을 RESTful 웹 서비스 형태로 제공합니다. 이를 통해 모든 클라이언트 애플리케이션은 기본 기술에 관계없이 REST를 통해 이러한 웹 서비스를 호출할 수 있습니다.
2. 장치의 이벤트 – 요즘에는 모든 일이 제대로 진행되어야 합니다. 모바일 휴대폰, 노트북, 심지어 차량용 시스템까지 모든 기기에 적용됩니다.
이러한 기기에서 일반 웹 애플리케이션과 통신하는 애플리케이션을 코딩하는 데 필요한 노력을 상상해 보세요. 앞서 언급했듯이 RESTful API를 사용하면 기기의 기본 레이어를 알 필요가 없으므로 이 작업이 훨씬 간단해집니다.
3. 클라우드의 사건 모든 것이 클라우드로 이동하고 있습니다. 애플리케이션들은 서서히 클라우드 기반 시스템으로 옮겨가고 있습니다. Azure or Amazon. Azure Amazon 많은 클라우드 서비스들이 RESTful 아키텍처 기반의 API를 제공하고 있습니다. 따라서 이제 애플리케이션은 클라우드 환경과 호환되도록 개발되어야 합니다. 모든 클라우드 기반 아키텍처가 REST 원칙에 따라 작동하기 때문에, 클라우드 서비스를 최대한 활용하려면 웹 서비스를 REST 기반 아키텍처로 프로그래밍하는 것이 합리적입니다.
RESTful 핵심 요소
REST 웹 서비스는 처음 등장한 이후로 많은 발전을 거듭해 왔습니다. 2002년 웹 컨소시엄은 WSDL과 SOAP 웹 서비스 정의를 발표했고, 이는 웹 서비스 구현 방식의 표준이 되었습니다.
2004년 웹 컨소시엄은 RESTful이라는 추가 표준 정의를 발표했습니다. 지난 몇 년 동안 이 표준은 매우 인기를 얻었으며 현재 페이스북과 트위터를 포함하여 전 세계에서 가장 인기 있는 웹사이트들에서 많이 사용되고 있습니다.
REST는 특정 환경에 있는 리소스에 접근하는 방식입니다. 예를 들어, 중요한 문서, 사진 또는 비디오를 저장하는 서버가 있다고 가정해 보겠습니다. 이 모든 것이 리소스의 예입니다. 웹 브라우저와 같은 클라이언트가 이러한 리소스가 필요할 경우 서버에 요청을 보내야 합니다. REST 서비스는 이러한 리소스에 접근하는 표준 방식을 정의합니다.
RESTful 구현의 핵심 요소는 다음과 같습니다.
- 리소스 – 첫 번째 핵심 요소는 바로 리소스 자체입니다. 서버의 웹 애플리케이션에 여러 직원의 기록이 있다고 가정해 보겠습니다. URL 웹 애플리케이션의 https://demo.guru99.com이제 REST 서비스를 통해 직원 기록 리소스에 액세스하려면 다음 명령을 실행할 수 있습니다. https://demo.guru99.com/employee/1이 명령은 웹 서버에게 직원 번호가 1인 직원의 세부 정보를 제공하도록 지시합니다.
- 요청 동사 – 이 부분은 리소스로 무엇을 하고 싶은지를 설명합니다. 브라우저는 엔드포인트에 데이터를 가져오고 싶다고 알리기 위해 GET 동사를 사용합니다. 하지만 POST, PUT, DELETE 등 다른 여러 동사도 사용할 수 있습니다. 따라서 예시의 경우를 보면 https://demo.guru99.com/employee/1웹 브라우저는 실제로 직원 기록의 세부 정보를 가져오기 위해 GET 동사를 호출하고 있습니다.
- 요청 헤더 - 이는 요청과 함께 전송되는 추가 지침입니다. 여기에는 필요한 응답 유형이나 승인 세부 정보가 포함될 수 있습니다.
- 요청 본문 – 이는 요청과 함께 전송되는 데이터입니다. 데이터는 일반적으로 REST 웹 서비스에 POST 요청을 보낼 때 요청 본문에 포함됩니다. POST 호출에서 클라이언트는 REST 웹 서비스에 서버에 리소스를 추가하고 싶다고 알립니다. 따라서 요청 본문에는 추가해야 할 리소스에 대한 세부 정보가 포함됩니다.
- 응답 본문 – 이것이 응답의 본문입니다. 예를 들어 RESTful API를 사용하는 경우, 웹 서버에 다음과 같은 요청을 보내면 응답이 전송됩니다. https://demo.guru99.com/employee/1웹 서버는 응답 본문에 직원의 모든 세부 정보가 포함된 XML 문서를 반환할 수 있습니다.
- 응답 상태 코드 – 이러한 코드는 웹 서버에서 응답과 함께 반환되는 일반적인 코드입니다. 예를 들어, 코드 200은 클라이언트에게 응답을 반환하는 동안 오류가 없을 때 일반적으로 반환됩니다.
편안한 방법
아래 다이어그램은 대부분의 동사(POST, GET, PUT, DELETE)와 해당 동사가 의미하는 REST API 예시를 보여줍니다.
해당 위치에 RESTful 웹 서비스가 정의되어 있다고 가정해 보겠습니다. https://demo.guru99.com/employee클라이언트가 이 웹 서비스에 요청을 보낼 때, GET, POST, DELETE, PUT과 같은 일반적인 HTTP 동사를 사용할 수 있습니다. 아래는 클라이언트가 각각의 동사를 전송했을 때 발생하는 상황입니다.
- POST 이는 RESTful 웹 서비스를 사용하여 새로운 직원을 생성하는 데 사용됩니다.
- 바로 – 이는 RESTful 웹 서비스를 사용하여 모든 직원 목록을 가져오는 데 사용됩니다.
- PUT – 이는 RESTful 웹 서비스를 사용하여 모든 직원에게 업데이트를 제공하는 데 사용됩니다.
- 삭제 – 이는 RESTful 서비스를 이용하여 모든 직원을 삭제하는 데 사용됩니다.
이제 단일 레코드의 관점에서 살펴보겠습니다. 직원 번호가 1인 직원 레코드가 있다고 가정해 보겠습니다. 다음 작업들은 각각 다음과 같은 의미를 갖습니다.
- POST – 이는 해당되지 않습니다. 왜냐하면 우리는 이미 생성된 직원 1의 데이터를 가져오고 있기 때문입니다.
- 바로 – 이는 RESTful 웹 서비스를 이용하여 직원 번호가 1번인 직원의 세부 정보를 가져오는 데 사용됩니다.
- PUT – 이는 RESTful 웹 서비스를 이용하여 직원 번호 1번인 직원의 세부 정보를 업데이트하는 데 사용됩니다.
- 삭제 – 이는 직원 번호가 1번인 직원의 정보를 삭제하는 데 사용됩니다.
평안한 Archi강의
RESTful 또는 REST 스타일로 간주되는 애플리케이션 또는 아키텍처는 다음과 같은 특징을 가지고 있습니다.
1. 상태와 기능은 분산 리소스로 구분됩니다. 이는 모든 리소스가 GET, POST, PUT, DELETE와 같은 일반적인 HTTP 명령어를 통해 접근 가능해야 함을 의미합니다. 예를 들어, 서버에서 파일을 가져오려면 GET 요청을 보내 파일을 받을 수 있어야 합니다. 서버에 파일을 업로드하려면 POST 또는 PUT 요청을 보낼 수 있어야 합니다. 마지막으로, 서버에서 파일을 삭제하려면 DELETE 요청을 보낼 수 있어야 합니다.
2. 이 아키텍처는 클라이언트/서버 방식이며, 상태를 저장하지 않고, 계층형 구조를 가지며, 캐싱을 지원합니다.
- 클라이언트-서버는 서버가 애플리케이션을 호스팅하는 웹 서버가 되고, 클라이언트는 웹 브라우저만큼 간단할 수 있는 전형적인 아키텍처입니다.
- Stateless는 애플리케이션의 상태가 REST에서 유지되지 않음을 의미합니다. 예를 들어 DELETE 명령을 사용하여 서버에서 리소스를 삭제하면 삭제 정보가 다음 요청에 전달될 것이라고 기대할 수 없습니다.
리소스가 삭제되었는지 확인하려면 GET 요청을 보내야 합니다. GET 요청은 먼저 서버의 모든 리소스를 가져오는 데 사용되며, 그 후 리소스가 실제로 삭제되었는지 확인해야 합니다.
RESTFul 원칙 및 제약 조건
REST 아키텍처는 몇 가지 특징을 기반으로 하며, 이러한 특징은 아래에 자세히 설명되어 있습니다. 모든 RESTful 웹 서비스는 RESTful이라고 불리려면 아래 특징들을 충족해야 합니다. 이러한 특징들은 RESTful 기반 서비스를 개발할 때 따라야 할 설계 원칙이라고도 합니다.
이는 REST 기반 아키텍처의 가장 기본적인 요건입니다. 즉, 서버는 클라이언트에게 필요한 기능을 제공하는 RESTful 웹 서비스를 갖추고 있어야 합니다. 클라이언트는 서버의 웹 서비스에 요청을 보내고, 서버는 요청을 거부하거나 적절한 응답을 클라이언트에게 제공합니다.
- 무국적자
무상태(stateless) 개념은 클라이언트가 서버에 필요한 모든 정보를 제공해야 한다는 것을 의미합니다. 이는 서버가 응답을 적절하게 처리하기 위해 필수적입니다. 서버는 클라이언트의 요청 사이에 어떠한 정보도 유지해서는 안 됩니다. 이는 매우 단순하고 독립적인 질문-응답 과정입니다. 클라이언트가 질문을 하면 서버는 적절하게 답변합니다. 클라이언트가 또 다른 질문을 하면, 서버는 이전 질문-응답 상황을 기억하지 못하고 새로운 질문에 독립적으로 답변해야 합니다.
- 캐시
캐시 개념은 앞서 설명한 상태 비저장 문제를 해결하는 데 도움이 됩니다. 각 서버-클라이언트 요청은 독립적이기 때문에 클라이언트가 이전에 이미 요청했던 동일한 요청을 다시 서버에 요청할 수 있습니다. 이 경우 요청은 서버로 전송되고 서버는 응답을 보내게 되는데, 이로 인해 네트워크 트래픽이 증가합니다. 캐시는 클라이언트 측에서 구현되는 개념으로, 이미 서버로 전송된 요청을 저장합니다. 따라서 클라이언트가 동일한 요청을 다시 보내면 서버에 직접 요청하는 대신 캐시에 저장된 정보를 가져옵니다. 이는 클라이언트와 서버 간의 네트워크 트래픽 왕복량을 줄여줍니다.
- 계층화 시스템
계층형 시스템의 개념은 미들웨어 계층과 같은 추가 계층을 클라이언트와 RESTful 웹 서비스를 호스팅하는 서버 사이에 삽입할 수 있다는 것입니다. (미들웨어 계층은 모든 비즈니스 로직이 구현되는 곳입니다. 이는 클라이언트가 웹 서비스를 호출하기 전에 상호 작용하는 추가 서비스일 수 있습니다.) 하지만 이러한 계층의 도입은 클라이언트와 서버 간의 상호 작용을 방해하지 않도록 투명하게 이루어져야 합니다.
- 인터페이스/균일한 구성tract
이것이 바로 RESTful 웹 서비스가 작동하는 기본 원리입니다. RESTful은 기본적으로 HTTP 웹 계층에서 작동하며, 아래의 주요 동사들을 사용하여 서버의 리소스와 상호 작용합니다.
- POST – 서버에 리소스를 생성합니다.
- GET – 서버에서 리소스를 가져옵니다.
- PUT – 리소스의 상태를 변경하거나 업데이트합니다.
- 삭제 – 서버에서 리소스를 제거하거나 삭제합니다.
REST와 SOAP의 주요 차이점
개발자들은 웹 서비스를 설계할 때 REST와 SOAP 중 어떤 방식을 선택할지 고민하는 경우가 많습니다. 둘 다 분산 애플리케이션 간의 통신을 가능하게 하지만, 설계 철학은 크게 다릅니다. REST는 간단한 HTTP 동사와 JSON과 같은 경량 형식을 사용하는 아키텍처 스타일인 반면, SOAP는... SOAP XML 봉투와 형식적인 구문에 의존하는 엄격한 프로토콜입니다.trac아래 표는 가장 중요한 차이점을 요약한 것입니다.
| 아래 | REST | SOAP |
|---|---|---|
| 타입 | Archi건축 양식 | 엄격한 프로토콜 |
| 데이터 형식 | JSON, XML, 일반 텍스트, HTML | XML만 |
| 교통편 | HTTP만 | HTTP, SMTP, TCP 및 기타 |
| 주 정부 | 무국적자 | 무상태 또는 상태 |
| 성능 | 더 빠르고 더 가볍습니다 | XML 오버헤드로 인해 용량이 더 커집니다. |
| 가장 좋은 | 웹, 모바일 및 공개 API | 엄격한 보안이 필요한 기업용 앱 |
실제로 REST는 속도가 빠르고 사용하기 쉽기 때문에 공개 웹 및 모바일 API에서 기본적으로 사용되는 반면, SOAP는 내장 보안 및 형식적 일관성이 요구되는 엔터프라이즈 시스템에서 여전히 유용합니다.tracTS.
ASP.NET에서 첫 번째 Restful 웹 서비스 만들기
이번 REST API 튜토리얼에서는 ASP.NET을 사용하여 RESTful 웹 서비스를 만드는 방법을 배우겠습니다.
웹 서비스는 다양한 언어로 작성할 수 있으며, 여러 통합 개발 환경을 사용하여 REST 기반 서비스를 만들 수 있습니다.
이 RESTful API 예제에서는 Visual Studio를 사용하여 .NET으로 REST 애플리케이션을 만들겠습니다. 아래와 같은 데이터를 처리하는 RESTful 웹 서비스를 구현할 것입니다.
아래 데이터는 Tutorialid를 기반으로 자사에서 제공하는 튜토리얼을 보여주는 REST API 예시입니다.
| 튜토리얼ID | 튜토리얼 이름 |
|---|---|
| 0 | 배열 |
| 1 | 큐 |
| 2 | 스택 |
본 REST API 튜토리얼 예제에서는 아래의 RESTful 동사들을 구현할 것입니다.
- 튜토리얼 받기 클라이언트가 이 RESTful API를 호출하면 웹 서비스에서 제공하는 모든 튜토리얼을 볼 수 있습니다.
- 튜토리얼/튜토리얼ID 받기 클라이언트가 이 RESTful API를 호출하면 클라이언트가 전송한 Tutorialid를 기반으로 튜토리얼 이름이 제공됩니다.
- POST 튜토리얼/튜토리얼 이름 클라이언트가 이 RESTful API를 호출하면, 클라이언트는 튜토리얼 이름을 삽입해 달라는 요청을 제출합니다. 그러면 웹 서비스는 제출된 튜토리얼 이름을 컬렉션에 추가합니다.
- DELETE 튜토리얼/튜토리얼id 클라이언트가 이 RESTful API를 호출하면, 클라이언트는 Tutorialid를 기반으로 Tutorialname을 삭제하는 요청을 제출합니다. 그러면 웹 서비스는 제출된 튜토리얼 이름을 컬렉션에서 삭제합니다.
위의 구현 내용을 실행하는 첫 번째 RESTful 웹 서비스를 만들기 위해 아래 단계를 따라 진행해 보겠습니다.
첫 번째 편안한 웹 서비스를 만드는 방법
단계 1) 새 프로젝트를 만듭니다.
첫 번째 단계는 빈 공간을 만드는 것입니다. Asp.Net 웹 애플리케이션입니다. Visual Studio 2013에서 파일 메뉴 옵션 > 새 프로젝트를 클릭합니다.
[새 프로젝트] 옵션을 클릭하면 Visual Studio에서 프로젝트 유형을 선택하고 필요한 세부 정보를 입력하는 대화 상자가 나타납니다. 이에 대한 설명은 다음 단계에서 제공됩니다.
단계 2) 프로젝트 이름과 위치를 입력하세요.
- 먼저 다음을 선택했는지 확인하세요. C# ASP.NET 웹 애플리케이션의 웹 템플릿입니다. 웹 서비스 프로젝트를 생성하려면 프로젝트 유형이 반드시 이 유형이어야 합니다. 이 옵션을 선택하면 Visual Studio에서 웹 기반 애플리케이션에 필요한 파일을 추가하는 데 필요한 단계를 자동으로 수행합니다.
- 프로젝트에 이름을 지정하세요. 저희의 경우 "Webservice.REST"입니다.
- 그런 다음 프로젝트 파일이 저장될 위치를 지정했는지 확인하십시오.
완료되면 Visual Studio 2013의 솔루션 탐색기에서 프로젝트 파일이 생성된 것을 확인할 수 있습니다.
단계 3) 웹 서비스 파일을 만듭니다.
다음 단계는 RESTful 웹 서비스를 담을 웹 서비스 파일을 생성하는 것입니다.
- 먼저 아래 그림과 같이 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭합니다.
- 이 단계에서,
- 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭합니다.
- “추가->새 항목” 옵션을 선택하세요.
나타나는 대화 상자에서 다음 단계를 수행해야 합니다.
- WCF 서비스(Ajax 지원) 옵션을 선택하세요. 이 형식의 파일을 선택하면 Visual Studio에서 RESTful 웹 서비스를 생성하는 데 도움이 되는 기본 코드를 추가합니다. WCF는 WCF(Web Service Framework)의 약자입니다. Windows 의사 소통 FoundationWCF는 다양한 플랫폼(또는 동일한 플랫폼)의 애플리케이션이 TCP, HTTP, HTTPS와 같은 다양한 프로토콜을 통해 통신할 수 있도록 하는 라이브러리입니다. Ajax는 비동기 방식입니다. JavaScript 그리고 XML. AJAX를 사용하면 백그라운드에서 서버와 소량의 데이터를 교환하여 웹 페이지를 비동기적으로 업데이트할 수 있습니다.
- 다음으로 서비스 이름을 지정합니다. 저희의 경우 TutorialService입니다.
- 마지막으로 추가 버튼을 클릭하여 솔루션에 서비스를 추가합니다.
단계 4) 구성을 하십시오.
다음 단계는 이 프로젝트가 RESTful 웹 서비스와 연동될 수 있도록 구성을 변경하는 것입니다. 이를 위해서는 특정 파일에 대한 수정이 필요합니다. 웹.구성이 파일은 웹 서비스 프로젝트 파일과 같은 창에 나타납니다. Web.config 파일에는 웹 애플리케이션이 정상적으로 작동하는 데 필요한 모든 구성 정보가 포함되어 있습니다. 이번 변경을 통해 애플리케이션은 순수 RESTful 웹 서비스처럼 데이터를 송수신할 수 있게 됩니다.
- Web.config 파일을 클릭하여 코드를 여세요.
- 그 선을 찾으세요 .
- 해당 줄을 다음과 같이 변경하세요. .
단계 5) 구현을 위한 코드를 추가합니다.
다음 단계는 구현 코드를 추가하는 것입니다. 아래의 모든 코드는 TutorialService.svc 파일에 작성해야 합니다.
- 첫 번째 단계는 프로그램에서 사용할 데이터를 나타내는 코드를 추가하는 것입니다. "Arrays", "Queues", "Stacks"라는 값을 가진 문자열 변수 목록을 만들 것입니다. 이 변수들은 호스팅 웹 서비스를 통해 제공되는 튜토리얼 이름을 나타냅니다.
namespace Webservice.REST { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class TutorialService { private static List<String> lst = new List<String> (new String[] {"Arrays","Queues","Stacks"});
단계 6) GET 메소드에 대한 코드를 정의하십시오.
다음으로, GET 메서드에 대한 코드를 정의하겠습니다. 이 코드 역시 TutorialService.svc 파일에 있으며, 브라우저에서 서비스를 호출할 때마다 실행됩니다.
아래 시나리오를 구현하기 위해 아래 방법이 사용될 것입니다.
- 사용자가 이용 가능한 모든 튜토리얼 목록을 원한다면, 아래 코드를 작성해야 합니다.
[WebGet(UriTemplate = "/Tutorial")] public String GetAllTutorial() { int count = lst.Count; String TutorialList = ""; for (int i = 0; i < count; i++) TutorialList = TutorialList + lst[i] + ","; return TutorialList; }
Code 설명:-
- 첫 번째 코드 줄이 가장 중요합니다. 이 코드는 특정 메서드를 호출하는 방법을 정의하는 데 사용됩니다. URL그러므로, 저희 웹 서비스 링크가 다음과 같다면 http://localhost:52645/TutorialService.svc 그리고 우리는 거기에 '/Tutorial'을 추가합니다. URL에서와 같이 http://localhost:52645/TutorialService.svc/Tutorial그러면 위 코드가 호출됩니다. 'WebGet' 속성은 이 메서드가 RESTful 메서드가 되어 GET 동사를 통해 호출될 수 있도록 하는 매개변수입니다.
- 이 코드 섹션은 'lst' 변수의 문자열 목록을 살펴보고 호출 프로그램에 모든 문자열을 반환하는 데 사용됩니다.
단계 7) 출력을 반환합니다.
아래 코드는 튜토리얼 ID를 사용하여 튜토리얼 서비스에 GET 호출이 이루어지면 해당 튜토리얼 ID에 맞는 튜토리얼 이름을 반환하도록 합니다.
[WebGet(UriTemplate = "/Tutorial/{Tutorialid}")] public String GetTutorialbyID(String Tutorialid) { int pid; Int32.TryParse(Tutorialid, out pid); return lst[pid]; }
Code 설명:-
- 코드의 첫 번째 줄이 가장 중요합니다. 이 줄은 우리가 이 메서드를 어떻게 호출할 수 있는지를 정의합니다. URL그러므로, 저희 웹 서비스 링크가 다음과 같다면 http://localhost:52645/TutorialService.svc 그리고 우리는 '/Tutorial/{Tutorialid}'를 추가합니다. URL그러면 우리는 웹 서비스를 다음과 같이 호출할 수 있을 것입니다. http://localhost:52645/TutorialService.svc/Tutorial/1예를 들어, 웹 서비스는 튜토리얼 ID가 1인 튜토리얼의 이름을 반환합니다.
- 이 코드 부분은 웹 메서드에 전달된 튜토리얼 ID를 포함하는 튜토리얼 이름을 반환하는 데 사용됩니다.
- 기본적으로 기억해야 할 것은 전달되는 모든 값입니다. URL 브라우저에는 문자열이 있습니다.
- 하지만 리스트의 인덱스는 정수여야 한다는 점을 기억해야 합니다. 따라서 Tutorialid를 먼저 정수로 변환하는 데 필요한 코드를 추가합니다.
- 그런 다음 이를 사용하여 리스트에서의 인덱스 위치에 접근하고 해당 값을 호출 프로그램에 반환합니다.
단계 8) POST 메서드에 대한 코드를 작성하세요.
다음 단계는 POST 메서드에 대한 코드를 작성하는 것입니다. 이 메서드는 POST 방식을 통해 튜토리얼 목록에 문자열 값을 추가할 때마다 호출됩니다. 예를 들어, "소프트웨어 테스팅"이라는 튜토리얼 이름을 추가하려면 POST 메서드를 사용해야 합니다.
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/Tutorial/{str}")] public void AddTutorial(String str) { lst.Add(str); }
Code 설명:-
- 첫 번째 줄은 메서드에 추가된 'WebInvoke' 속성입니다. 이 속성을 통해 POST 호출을 통해 메서드를 호출할 수 있습니다. RequestFormat 및 ResponseFormat 속성은 JSON 형식으로 지정해야 하는데, RESTful 웹 서비스에 값을 POST할 때는 값이 JSON 형식이어야 하기 때문입니다.
- 두 번째 코드 줄은 POST 호출을 통해 전달된 문자열 값을 기존 튜토리얼 문자열 목록에 추가하는 데 사용됩니다.
단계 9) 삭제 작업을 처리하는 메서드를 추가하세요.
마지막으로, 삭제 작업을 처리하는 메서드를 추가하겠습니다. 이 메서드는 DELETE 메서드를 통해 튜토리얼 목록에서 기존 문자열 값을 삭제할 때마다 호출됩니다.
[WebInvoke(Method = "DELETE", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Tutorial/{Tutorialid}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] public void DeleteTutorial(String Tutorialid) { int pid; Int32.TryParse(Tutorialid, out pid); lst.RemoveAt(pid); }
Code 설명:-
- 첫 번째 줄은 메서드에 연결된 'WebInvoke' 속성입니다. 이 속성을 통해 DELETE 호출을 통해 해당 메서드를 호출할 수 있습니다. RequestFormat 및 ResponseFormat 속성은 값이 JSON 형식이어야 하므로 JSON 형식으로 지정해야 합니다. Method 매개변수가 "DELETE"로 설정되어 있다는 점에 유의하세요. 즉, DELETE 명령을 실행할 때마다 이 메서드가 호출됩니다.
- 두 번째 코드 줄은 DELETE 호출을 통해 전송된 Tutorialid를 가져온 다음 목록에서 해당 ID를 삭제하는 데 사용됩니다. (그만큼 인텍스 넘스 코드의 함수는 튜토리얼 ID를 문자열 변수에서 정수로 변환하는 데 사용됩니다.
첫 번째 Restful 웹 서비스 실행
이제 위 섹션에서 웹 서비스를 완전히 구축했으므로, 모든 클라이언트에서 호출할 수 있도록 튜토리얼 서비스를 실행하는 방법을 살펴보겠습니다.
웹 서비스를 실행하려면 아래 단계를 따르십시오.
단계 1) 프로젝트 파일인 Webservice.REST를 마우스 오른쪽 버튼으로 클릭합니다.
단계 2) '시작 프로젝트로 설정' 메뉴 옵션을 선택하세요. 이렇게 하면 Visual Studio에서 전체 솔루션을 실행할 때 이 프로젝트도 함께 실행됩니다.
단계 3) 다음 단계는 프로젝트를 실행하는 것입니다. 시스템에 설치된 기본 브라우저에 따라 Visual Studio의 실행 버튼 옆에 해당 브라우저 이름이 표시됩니다. 저희의 경우 다음과 같습니다. Google Chrome 나타납니다. 이 버튼을 클릭하기만 하세요.
산출:-
프로젝트를 실행한 후 TutorialService.svc/Tutorial 섹션으로 이동하면 아래와 같은 출력을 볼 수 있습니다.
위 출력에서,
- 브라우저가 'GET' 동사를 호출하고 웹 서비스의 'GetAllTutorial' 메서드를 실행하는 것을 볼 수 있습니다. 이 모듈은 웹 서비스에서 제공하는 모든 튜토리얼을 표시하는 데 사용됩니다.
첫 번째 Restful 웹 서비스 테스트하기
위 섹션에서 우리는 브라우저를 사용하여 'GET' 동사를 실행하고 'GetAllTutorial'을 호출하는 방법을 이미 살펴보았습니다.
- 이제 브라우저를 사용하여 다음의 사용 사례 시나리오를 실행해 보겠습니다.
GET 튜토리얼/튜토리얼 ID – 클라이언트가 이 RESTful API를 호출하면 클라이언트가 보낸 튜토리얼 ID를 기반으로 튜토리얼 이름이 반환됩니다.
브라우저에서 "Tutorial"이라는 단어 뒤에 "/1" 문자열을 추가하세요. URL엔터 키를 누르면 아래와 같은 결과가 나타납니다.
이제 출력 결과에 "Queues"가 표시될 것입니다. 이는 튜토리얼 문자열 목록에서 1번째에 해당하는 값입니다. 즉, 'GetTutorialbyID' 메서드가 웹 서비스에서 호출되고 있다는 뜻입니다. 또한, 브라우저를 통해 웹 서비스와 해당 메서드로 1이라는 값이 성공적으로 전달되고 있으며, 이 때문에 브라우저에서 "Queues"라는 올바른 값이 표시되는 것입니다.
- 다음으로, 아래 시나리오를 실행하여 웹 서비스를 사용해 보겠습니다. 이를 위해서는 다음 도구를 설치해야 합니다. Fiddler무료로 다운로드할 수 있는 도구입니다.
POST 튜토리얼/튜토리얼 이름 – 클라이언트가 이 RESTful API를 호출하면, 클라이언트는 튜토리얼 이름을 삽입하는 요청을 제출합니다. 그러면 웹 서비스는 제출된 튜토리얼 이름을 컬렉션에 추가합니다.
실행 Fiddler 아래 도구를 사용하여 단계를 수행하십시오.
- 작성기 섹션으로 이동하세요. 이곳에서 웹 애플리케이션에 제출할 요청을 생성할 수 있습니다.
- 요청 유형이 "POST"이고 올바른지 확인하십시오. URL 공격을 받고 있는데, 우리 경우에는 그래야 합니다. http://localhost:52645/TutorialService.svc/Tutorial.
- Content-Type이 application/json으로 표시되어 있는지 확인하세요. 웹 서비스의 POST 요청 메서드는 JSON 형식의 데이터만 허용하므로 애플리케이션에 요청을 보낼 때 이를 반드시 지정해야 합니다.
- 마지막으로 데이터를 입력해야 합니다. POST 메서드는 'str'이라는 매개변수를 받는다는 것을 기억하세요. 따라서 여기서는 "Trees"라는 값을 튜토리얼 이름 컬렉션에 추가하고, 이 값이 'str' 변수 이름으로 지정되도록 합니다.
마지막으로 실행 버튼을 클릭하기만 하면 됩니다. Fiddler이렇게 하면 웹 서비스에 "Trees"라는 데이터를 POST 방식으로 전송해 달라는 요청이 전송됩니다.
이제 튜토리얼을 살펴보겠습니다. URL 튜토리얼 목록에 있는 모든 문자열을 표시해 보면 "Trees"라는 값도 있는 것을 확인할 수 있습니다. 이는 웹 서비스에 대한 POST 요청이 성공적으로 실행되었고, 해당 문자열이 튜토리얼 목록에 성공적으로 추가되었음을 보여줍니다.
- 다음으로, 아래 시나리오를 실행하여 웹 서비스를 사용해 보겠습니다. 이를 위해서도 다음이 필요합니다. Fiddler 도구입니다.
튜토리얼/튜토리얼 ID 삭제 – 클라이언트가 이 RESTful API를 호출하면, 클라이언트는 튜토리얼 ID를 기반으로 튜토리얼 이름을 삭제하는 요청을 제출합니다. 그러면 웹 서비스는 제출된 튜토리얼 이름을 컬렉션에서 삭제합니다.
실행 Fiddler 아래 도구를 사용하여 단계를 수행하십시오.
- 작성기 섹션으로 이동하세요. 이곳에서 웹 애플리케이션에 제출할 요청을 생성할 수 있습니다.
- 요청 유형이 "삭제"이고 올바른지 확인하십시오. URL 공격을 받고 있는데, 우리 경우에는 그래야 합니다. http://localhost:52645/TutorialService.svc/Tutorial목록에서 문자열을 삭제하는 데 사용된 ID가 전송되는지 확인하십시오. URL 매개변수로 전달합니다. REST 예시에서는 1을 보내므로 2가 삭제됩니다.nd 저희 컬렉션의 요소 중 하나인 "대기열"입니다.
마지막으로 실행 버튼을 클릭하기만 하면 됩니다. Fiddler이렇게 하면 웹 서비스에 "큐" 데이터를 삭제하라는 요청이 전송됩니다.
이제 튜토리얼을 살펴보겠습니다. URL 튜토리얼 목록에 있는 모든 문자열을 표시해 보면 "Queues"라는 값이 더 이상 나타나지 않는 것을 알 수 있습니다.
이는 웹 서비스에 대한 삭제 요청이 성공적으로 실행되었음을 보여줍니다. 튜토리얼 문자열 목록에서 인덱스 번호 1에 있는 요소가 성공적으로 삭제되었습니다.
RESTful API 우수 사례
제대로 작동하는 REST API를 구축하는 것은 단지 첫걸음일 뿐입니다. 확장 가능하고 유지 관리가 용이한 API를 구축하려면 체계적인 노력이 필요합니다. 아래의 모범 사례들은 엔드포인트를 예측 가능하고 안전하며 다른 개발자와 AI 에이전트가 쉽게 사용할 수 있도록 유지하는 데 도움이 됩니다.
- 동사 대신 명사를 사용하세요 URLs. 엔드포인트(예: ...) /직원/1 보다 더 명확하다 /getEmployee?id=1HTTP 동사가 이미 동작을 설명하고 있기 때문입니다.
- 의미 있는 상태 코드를 반환합니다. 성공 시 200, 리소스 생성 시 201, 잘못된 요청 시 400, 권한 없는 접근 시 401, 리소스 누락 시 404, 서버 오류 시 500을 전송하십시오.
- API 버전을 관리하세요. 버전 세그먼트를 추가하는 방법(예: ...) /v1/ 이 경로를 통해 기존 고객에게 영향을 주지 않고 서비스를 발전시킬 수 있습니다.
- 모든 엔드포인트를 안전하게 보호하세요. HTTPS를 사용하고, API 키 또는 OAuth 2.0 토큰을 사용하며, 모든 입력값을 검증하십시오.
- 페이지네이션 및 필터링 기능을 지원합니다. 대용량 컬렉션을 페이지 단위로 반환하면 응답 속도가 빨라지고 서버 부하가 줄어듭니다.
이러한 규칙을 따르면 RESTful 웹 서비스를 직관적으로 통합할 수 있으며, 그 대상은 모바일 앱, 파트너 시스템 또는 자동화된 AI 워크플로 등입니다.




























