ASP.NET Web API를 활용한 RESTful 서비스 개발

SangHoon Han
SangHoon HanWeb Developer en Nexon Korea
ASP.NET Web API를 활용한
RESTful 서비스 개발
- 대학내일 한상훈 매니저
2014년 1월 새해 명품 특강!
ASP.NET,
서비스 플랫폼으로 날다!
세션 소개
.NET Framework 기반의 Web API 프레임워크인 ASP.NET Web API를
살펴보고, 이를 활용하여 보다 쉽고 빠르게 다양한 유형의 클라이언트에서
활용이 가능한 RESTful 서비스 개발 방법을 파헤쳐 보겠습니다.
ASP.NET Web API의 기본적인 개념에서 구현에 이르기까지 실제 구동되는
데모를 중심으로 살펴봅니다.
먼저, Web API는 무엇인가?
Web API는 무엇인가?
왜 Web API를 사용해야 하는가?
플랫폼 환경의 제한이 없는 서비스
WEB DESKTOP
Web API
클라이언트 환경의 제한이 없는 서비스
Web API
Web API의 대명사 REST
• REST : REpresentational State Transfer
70
21
5
2
0
10
20
30
40
50
60
70
80
점유율 (ProgrammableWeb, Jan 9, 2014)
REST SOAP Javascript XML-RPC
RESTful 서비스
동작 설명 SQL HTTP 기존 방식 RESTful API
Create 생성 INSERT POST POST, /Write.aspx?name=contact POST, /Contact
Read 읽기 SELECT GET GET, /List.aspx?name=contact&id=1 GET, /Contact/1
Update 갱신 UPDATE PUT POST, /Edit.aspx?name=contact&id=1 PUT, /Contact/1
Delete 삭제 DELETE DELETE GET, /Delete.aspx?name=contact&id=1 DELETE, /Contact/1
RESTful 서비스
기존 방식의 웹 접근과 RESTful API와의 요청 URI 차이
ASP.NET Web API를 활용한 RESTful 서비스 개발
그래서, ASP.NET Web API!!
One ASP.NET(ASP.NET Web Stack)
ASP.NET Web API 계보
MVC Framework + WCF Web API
• ASP.NET Routing
• Model binding
• Validation
• Filters
• Link generation
• Testability
• IoC integration
• VS template
• Scaffolding
ASP.NET MVC
• Modern HTTP progra
mming model
• HttpClient
• Task-based async
• Formatting, content n
egotiation
• Server-side query composit
ion
• Create custom help pages
• Self-host
• Tracing
WCF Web API
ASP.NET Web API 특징
• HTTP 기반의 프로그래밍 모델 지원
• 간단하고 쉽게 HTTP 리소스 생성 가능
• HTTP 내용 협상(content negotiation)
• 공통 관심사(cross cutting concerns)의 분리
• 도움말 페이지(help page) 생성
• 유연한 호스팅(hosting)
• 이식 가능한 Web API 클라이언트
• Web API 보안(CORS, OAuth 2.0, Authn Filter)
• 가볍고, 테스트 가능하고, 확장이 가능함
ASP.NET Web API 구현하기 #1
ASP.NET Web API 구현
• ApiController를 상속받는 컨트롤러 생성
• 각각의 액션메소드 구현
– 액션메소드의 접두사가 HTTP 메소드와 서로 매핑
• GetComment -> HTTP GET 메소드
• PostComment -> HTTP POST 메소드
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> GetComment()
{
return new string[] { "value", "value" };
}
라우팅(Routing)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
public IEnumerable<TodoItem> GetTodos() { … }
라우팅(Routing)
• ApiController와 URI가 서로 매핑
– {controller} + “Controller” = ApiController 클래스명
– HTTP 메서드를 직접 적용
• [HttpGet / Post / Put / Delete]
– HTTP 메소드를 중복 적용
• [AcceptVerbs(“GET”, “HEAD”)]
– 액션 이름 라우팅
• [ActionName(“Thumbnail”)]
– 비-액션(Non-Actions) 처리
• [NonAction]
• 간단한 매개 변수는 URI를 통해서 바로 전달
– 라우트 데이터(Route data), 쿼리 파라미터(Query parameters)
• 복합 형식(Complex Type)은 HTTP Body를 통해서 전달
– MediaTypeFormatter를 사용하여 Content-Type 기반으로 개체화 가능
– JSON, XML, Form 데이터는 기본으로 제공
• 사용자 정의 매개변수 바인딩(Custom parameter binding)
– [FromUrl], [FromBody], [ModelBinder] 등을 사용하여 재정의
액션 파라미터(Action Parameter)
• 모든 요청(Request)에서 유효성 검사 실행
• 유효성 검사 오류는 ModelState 개체에 축적
– ModelState.IsValue로 체크
• DataAnnotation 또는 사용자 정의 유효성 검사 로직 사용
유효성 검사(Validation)
• 응답 형식(Format)은 HTTP 내용 협상에 기초하여 결정
– [Accept] 헤더에 원하는 형식을 표현
• 서버의 응답 형식을 결정하는 요소
– 요청(Request)
– 액션메서드의 반환 형식
– MediaTypeFormatter 구성
• JSON과 XML 기본 제공
내용 협상(Content Negotiation)
• Web API를 제공할 때, API 사용법을 설명하는 도움말 페이지 제공
– ApiExplorer 클래스를 기반으로 동작
– Areas/HelpPages/ 하위 폴더 구성
• API 문서 추가 : ~/App_Data/XmlDocument.xml
API 도움말(Help) 페이지
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API 구현하기 #2
• 중앙 집중식의 단점을 보완하고 직관적인 라우팅 설정
– 보다 유연하고 명확한 라우팅
• 어트리뷰트 라우팅 활성
– App_Start / WebApiConfig.cs
• 어트리뷰트 라우팅 적용
어트리뷰트 라우팅(Attribute routing)
// Web API routes
config.MapHttpAttributeRoutes();
[Route("api/store/books/{bookid}")]
public Book GetBookByBookId(int bookid) { … }
어트리뷰트 라우팅(Attribute routing)
[Route("api/info/books/{bookid:int}")]
public Book GetInfoByBookId(int bookid)
[Route("api/info/books/{bookid:alpha}")]
public Book GetInfoByBookId(string bookid)
[Route("api/info/books/{bookid:int?}")]
public Book GetInfoByBookId(int bookid = 1) { … }
[Route("api/info/books/{bookid:int=1}")]
public Book GetInfoByBookId(int bookid) { … }
제약사항
옵션값 및 기본값
ASP.NET Web API를 활용한 RESTful 서비스 개발
http://attributerouting.net
• 웹에서 데이터 제어가 가능하게 하는 데이터 액세스 프로토콜
– 웹을 통해 데이터 소스에 대한 표준 CRUD 액세스를 제공
• Nuget 패키지 추가
– Microsoft.AspNet.WebApi.OData
• [Queryable], IQueryable<T>
• $top, $skip, $orderby, $filter, $select, $expand, $batch …
OData(Open Data Protocol) 지원
// OData 활성화
[Queryable]
public IQueryable<Product> GetProduct(…)
ASP.NET Web API를 활용한 RESTful 서비스 개발
• .NET 웹 서버와 웹 응용프로그램 사이의 표준 인터페이스를 정의
– 웹 응용프로그램을 서버와 분리
– IIS가 아닌 별도의 프로세스에서 웹 응용프로그램을 자체-호스트(Self-Host)
• Nuget 패키지 추가
– Microsoft.AspNet.WebApi.OwinSelfHost
• Microsoft.Owin.Host.HttpListener
– OWIN 응용 프로그램을 자체 호스트하기 위한 HTTP 서버 제공
OWIN(Open Web Interface for .NET) 통합
string baseAddress = "http://localhost:9000/";
// Start OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
ASP.NET Web API를 활용한 RESTful 서비스 개발
• 처리되지 않은 대부분의 예외는 HTTP 상태 코드 500 응답
• 예외 처리 기법
– HttpResponseException
• HttpResponseException 형식은 별개로 취급 (HTTP 응답 반환을 위해 설계됨)
• 생성자에 지정한 HTTP 상태 코드를 반환
– Exception Filter
• HttpResponseException 형식을 제외한 모든 유형의 처리되지 않은 예외에 대응
• 액션메소드 등록, 컨트롤러 등록, 전역 등록
– HttpError
• 응답 본문에 오류 정보를 반환할 수 있는 일관된 방법 제공
• 강력한 형식의 모델과 동일하게 내용 협상 및 직렬화 처리 수행
오류 및 예외 처리
ASP.NET Web API를 활용한 RESTful 서비스 개발
• Global Error Handling
• Attribute Routing Improvements
• Help Page Improvements
• IgnoreRoute Support
• BSON Media-Type Formatter
• Better Support for Async Filters
• Query Parsing for the Client Formatting Library
• Various bug fixes
ASP.NET Web API 2.1
Summary
RESTful 서비스의 가장 이상적인 플랫폼
ASP
.NET Web API
• ASP.NET Web API 공식 웹사이트
– http://www.asp.net/web-api
• What's New in ASP.NET Web API 2.1
– http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21
• Taeyo.NET ASP.NET Web API 번역 아티클
– http://www.taeyo.net/Columns/View.aspx?SEQ=464&PSEQ=35
• Egocube.pe.kr ASP.NET Web API 번역 아티클
– http://www.egocube.pe.kr/Translation/Index/asp-net-web-api
• Scott hanselman Blog
– http://www.hanselman.com/
• Build RESTful API's with ASP.NET Web API
– http://www.asp.net/web-api/tutorials/hands-on-labs/build-restful-apis-with-aspnet-web-api
• Introduction to ASP.NET Web API
– http://www.codeproject.com/Articles/549152/Introduction-to-ASP-NET-Web-API
• ASP.NET Web API 2.0 and the new OData keywords
– http://www.devcurry.com/2013/07/aspnet-web-api-20-and-new-odata-keywords.html#.Ukm2Hyuwf4a
• 닷넷코리아 온라인 세미나 1회
– http://www.dotnetkorea.com/DotNetNote/BoardList.aspx?BoardName=Seminar
참고자료
ASP.NET Web API를 활용한 RESTful 서비스 개발
1 de 41

Recomendados

2Naver Open Android API Translation At DCamp por
2Naver Open Android API Translation At DCamp2Naver Open Android API Translation At DCamp
2Naver Open Android API Translation At DCampJeikei Park
692 vistas57 diapositivas
ASP.NET 4 New Features por
ASP.NET 4 New FeaturesASP.NET 4 New Features
ASP.NET 4 New FeaturesSangHoon Han
82 vistas37 diapositivas
One ASP.NET por
One ASP.NETOne ASP.NET
One ASP.NETSangHoon Han
57 vistas20 diapositivas
PHP Slim Framework with Angular por
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with AngularJT Jintae Jung
1.6K vistas13 diapositivas
파이썬 웹 프로그래밍 2탄 por
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
924 vistas32 diapositivas
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처 por
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
1.5K vistas18 diapositivas

Más contenido relacionado

Similar a ASP.NET Web API를 활용한 RESTful 서비스 개발

Ksug 세미나 (윤성준) (20121208) por
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
4.2K vistas79 diapositivas
One-day-codelab por
One-day-codelabOne-day-codelab
One-day-codelabWebFrameworks
729 vistas27 diapositivas
Do IoT Yourself 3rd : Open API - revision 3 por
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Hyunghun Cho
3.4K vistas58 diapositivas
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현 por
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현Hong Min Kim
338 vistas36 diapositivas
RESTful API 설계 por
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
15.5K vistas39 diapositivas
Booting Spring Data REST por
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST경원 이
4.7K vistas52 diapositivas

Similar a ASP.NET Web API를 활용한 RESTful 서비스 개발(20)

Ksug 세미나 (윤성준) (20121208) por Sungjoon Yoon
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
Sungjoon Yoon4.2K vistas
Do IoT Yourself 3rd : Open API - revision 3 por Hyunghun Cho
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
Hyunghun Cho3.4K vistas
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현 por Hong Min Kim
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
Hong Min Kim338 vistas
RESTful API 설계 por Jinho Yoo
RESTful API 설계RESTful API 설계
RESTful API 설계
Jinho Yoo15.5K vistas
Booting Spring Data REST por 경원 이
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
경원 이4.7K vistas
Spring integration을 통해_살펴본_메시징_세계 por Wangeun Lee
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
Wangeun Lee24.8K vistas
임태현, IIS with ASP.NET por 태현 임
임태현, IIS with ASP.NET임태현, IIS with ASP.NET
임태현, IIS with ASP.NET
태현 임397 vistas
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석 por Tommy Lee
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
Tommy Lee2.2K vistas
우린 같은 곳을 바라 보고 있나요? por Arawn Park
우린 같은 곳을 바라 보고 있나요?우린 같은 곳을 바라 보고 있나요?
우린 같은 곳을 바라 보고 있나요?
Arawn Park106 vistas
Restful web service por sunguen lee
Restful web serviceRestful web service
Restful web service
sunguen lee941 vistas
어서 와~ ASP.NET Core는 처음이지? por SangHoon Han
어서 와~ ASP.NET Core는 처음이지?어서 와~ ASP.NET Core는 처음이지?
어서 와~ ASP.NET Core는 처음이지?
SangHoon Han341 vistas
Do IoT Yourself! - 사물 간의 연결을 위한 Open API por Hyunghun Cho
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Hyunghun Cho3.7K vistas
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석) por Wonseok Jang
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Wonseok Jang201 vistas
Django로 배우는 쉽고 빠른 웹개발 study 자료 por Han Sung Kim
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
Han Sung Kim1.7K vistas
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기 por Youngjae Kim
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
Youngjae Kim7.3K vistas
Naver 오픈api-마이그레이션가이드 20160913-리뷰 por NAVER D2
Naver 오픈api-마이그레이션가이드 20160913-리뷰Naver 오픈api-마이그레이션가이드 20160913-리뷰
Naver 오픈api-마이그레이션가이드 20160913-리뷰
NAVER D27.7K vistas
Spring MVC por ymtech
Spring MVCSpring MVC
Spring MVC
ymtech2.6K vistas
Node js[stg]onimusha 20140822 por 병헌 정
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822
병헌 정704 vistas

Más de SangHoon Han

ASP.NET Core와 Azure App Service와의 환상적인 만남 por
ASP.NET Core와 Azure App Service와의 환상적인 만남ASP.NET Core와 Azure App Service와의 환상적인 만남
ASP.NET Core와 Azure App Service와의 환상적인 만남SangHoon Han
42 vistas9 diapositivas
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights por
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application InsightsVSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application InsightsSangHoon Han
77 vistas42 diapositivas
최신 IT 트렌드, 그리고 Web을 만드는 사람들 por
최신 IT 트렌드, 그리고 Web을 만드는 사람들최신 IT 트렌드, 그리고 Web을 만드는 사람들
최신 IT 트렌드, 그리고 Web을 만드는 사람들SangHoon Han
61 vistas21 diapositivas
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf por
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdfSangHoon Han
81 vistas22 diapositivas
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf por
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfSangHoon Han
103 vistas31 diapositivas
Developer`s Web Standard por
Developer`s Web StandardDeveloper`s Web Standard
Developer`s Web StandardSangHoon Han
147 vistas20 diapositivas

Más de SangHoon Han(17)

ASP.NET Core와 Azure App Service와의 환상적인 만남 por SangHoon Han
ASP.NET Core와 Azure App Service와의 환상적인 만남ASP.NET Core와 Azure App Service와의 환상적인 만남
ASP.NET Core와 Azure App Service와의 환상적인 만남
SangHoon Han42 vistas
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights por SangHoon Han
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application InsightsVSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
VSO의 매력 터지는 핵심 기능! 클라우드 기반의 성능 분석 도구 Application Insights
SangHoon Han77 vistas
최신 IT 트렌드, 그리고 Web을 만드는 사람들 por SangHoon Han
최신 IT 트렌드, 그리고 Web을 만드는 사람들최신 IT 트렌드, 그리고 Web을 만드는 사람들
최신 IT 트렌드, 그리고 Web을 만드는 사람들
SangHoon Han61 vistas
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf por SangHoon Han
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
나는 웹 크리에이터다! 그리고... 최근 웹 핫이슈!.pdf
SangHoon Han81 vistas
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf por SangHoon Han
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
SangHoon Han103 vistas
Developer`s Web Standard por SangHoon Han
Developer`s Web StandardDeveloper`s Web Standard
Developer`s Web Standard
SangHoon Han147 vistas
ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms) por SangHoon Han
ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)
ASP.NET 4.0 New Features Part2 - URL Routing(ASP.NET WebForms)
SangHoon Han191 vistas
Blazor와 안면 트기! por SangHoon Han
Blazor와 안면 트기!Blazor와 안면 트기!
Blazor와 안면 트기!
SangHoon Han654 vistas
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이 por SangHoon Han
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이
ASP.NET의 시작(or 재시작)을 어려워하는 이들을 위한 길라잡이
SangHoon Han336 vistas
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET) por SangHoon Han
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
SangHoon Han1.9K vistas
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험 por SangHoon Han
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험
Intelligent Kiosk와 함께 떠나는 Microsoft Cognitive Services 탐험
SangHoon Han515 vistas
커뮤니티와 함께하는 슬기로운 개발생활 por SangHoon Han
커뮤니티와 함께하는 슬기로운 개발생활커뮤니티와 함께하는 슬기로운 개발생활
커뮤니티와 함께하는 슬기로운 개발생활
SangHoon Han292 vistas
I am ASP.NET Core Razor Pages por SangHoon Han
I am ASP.NET Core Razor Pages I am ASP.NET Core Razor Pages
I am ASP.NET Core Razor Pages
SangHoon Han737 vistas
크로스플랫폼으로 다시 태어난 ASP.NET Core por SangHoon Han
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core
SangHoon Han3.4K vistas
두근두근 ASP.NET 5! por SangHoon Han
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!
SangHoon Han3.6K vistas
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝! por SangHoon Han
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!
크로스 플랫폼을 지향하는 Alm, 당황하지 않고 vso로 빡! 끝!
SangHoon Han649 vistas
이제 온라인이다! 브라우저 안으로 들어온 Visual studio! por SangHoon Han
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
이제 온라인이다! 브라우저 안으로 들어온 Visual studio!
SangHoon Han2.1K vistas

ASP.NET Web API를 활용한 RESTful 서비스 개발

  • 1. ASP.NET Web API를 활용한 RESTful 서비스 개발 - 대학내일 한상훈 매니저 2014년 1월 새해 명품 특강! ASP.NET, 서비스 플랫폼으로 날다!
  • 2. 세션 소개 .NET Framework 기반의 Web API 프레임워크인 ASP.NET Web API를 살펴보고, 이를 활용하여 보다 쉽고 빠르게 다양한 유형의 클라이언트에서 활용이 가능한 RESTful 서비스 개발 방법을 파헤쳐 보겠습니다. ASP.NET Web API의 기본적인 개념에서 구현에 이르기까지 실제 구동되는 데모를 중심으로 살펴봅니다.
  • 3. 먼저, Web API는 무엇인가?
  • 5. 왜 Web API를 사용해야 하는가?
  • 6. 플랫폼 환경의 제한이 없는 서비스 WEB DESKTOP Web API
  • 7. 클라이언트 환경의 제한이 없는 서비스 Web API
  • 8. Web API의 대명사 REST • REST : REpresentational State Transfer 70 21 5 2 0 10 20 30 40 50 60 70 80 점유율 (ProgrammableWeb, Jan 9, 2014) REST SOAP Javascript XML-RPC
  • 10. 동작 설명 SQL HTTP 기존 방식 RESTful API Create 생성 INSERT POST POST, /Write.aspx?name=contact POST, /Contact Read 읽기 SELECT GET GET, /List.aspx?name=contact&id=1 GET, /Contact/1 Update 갱신 UPDATE PUT POST, /Edit.aspx?name=contact&id=1 PUT, /Contact/1 Delete 삭제 DELETE DELETE GET, /Delete.aspx?name=contact&id=1 DELETE, /Contact/1 RESTful 서비스 기존 방식의 웹 접근과 RESTful API와의 요청 URI 차이
  • 14. ASP.NET Web API 계보
  • 15. MVC Framework + WCF Web API • ASP.NET Routing • Model binding • Validation • Filters • Link generation • Testability • IoC integration • VS template • Scaffolding ASP.NET MVC • Modern HTTP progra mming model • HttpClient • Task-based async • Formatting, content n egotiation • Server-side query composit ion • Create custom help pages • Self-host • Tracing WCF Web API
  • 16. ASP.NET Web API 특징 • HTTP 기반의 프로그래밍 모델 지원 • 간단하고 쉽게 HTTP 리소스 생성 가능 • HTTP 내용 협상(content negotiation) • 공통 관심사(cross cutting concerns)의 분리 • 도움말 페이지(help page) 생성 • 유연한 호스팅(hosting) • 이식 가능한 Web API 클라이언트 • Web API 보안(CORS, OAuth 2.0, Authn Filter) • 가볍고, 테스트 가능하고, 확장이 가능함
  • 17. ASP.NET Web API 구현하기 #1
  • 18. ASP.NET Web API 구현 • ApiController를 상속받는 컨트롤러 생성 • 각각의 액션메소드 구현 – 액션메소드의 접두사가 HTTP 메소드와 서로 매핑 • GetComment -> HTTP GET 메소드 • PostComment -> HTTP POST 메소드 public class ValuesController : ApiController { // GET api/values public IEnumerable<string> GetComment() { return new string[] { "value", "value" }; }
  • 19. 라우팅(Routing) config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); public IEnumerable<TodoItem> GetTodos() { … }
  • 20. 라우팅(Routing) • ApiController와 URI가 서로 매핑 – {controller} + “Controller” = ApiController 클래스명 – HTTP 메서드를 직접 적용 • [HttpGet / Post / Put / Delete] – HTTP 메소드를 중복 적용 • [AcceptVerbs(“GET”, “HEAD”)] – 액션 이름 라우팅 • [ActionName(“Thumbnail”)] – 비-액션(Non-Actions) 처리 • [NonAction]
  • 21. • 간단한 매개 변수는 URI를 통해서 바로 전달 – 라우트 데이터(Route data), 쿼리 파라미터(Query parameters) • 복합 형식(Complex Type)은 HTTP Body를 통해서 전달 – MediaTypeFormatter를 사용하여 Content-Type 기반으로 개체화 가능 – JSON, XML, Form 데이터는 기본으로 제공 • 사용자 정의 매개변수 바인딩(Custom parameter binding) – [FromUrl], [FromBody], [ModelBinder] 등을 사용하여 재정의 액션 파라미터(Action Parameter)
  • 22. • 모든 요청(Request)에서 유효성 검사 실행 • 유효성 검사 오류는 ModelState 개체에 축적 – ModelState.IsValue로 체크 • DataAnnotation 또는 사용자 정의 유효성 검사 로직 사용 유효성 검사(Validation)
  • 23. • 응답 형식(Format)은 HTTP 내용 협상에 기초하여 결정 – [Accept] 헤더에 원하는 형식을 표현 • 서버의 응답 형식을 결정하는 요소 – 요청(Request) – 액션메서드의 반환 형식 – MediaTypeFormatter 구성 • JSON과 XML 기본 제공 내용 협상(Content Negotiation)
  • 24. • Web API를 제공할 때, API 사용법을 설명하는 도움말 페이지 제공 – ApiExplorer 클래스를 기반으로 동작 – Areas/HelpPages/ 하위 폴더 구성 • API 문서 추가 : ~/App_Data/XmlDocument.xml API 도움말(Help) 페이지
  • 26. ASP.NET Web API 구현하기 #2
  • 27. • 중앙 집중식의 단점을 보완하고 직관적인 라우팅 설정 – 보다 유연하고 명확한 라우팅 • 어트리뷰트 라우팅 활성 – App_Start / WebApiConfig.cs • 어트리뷰트 라우팅 적용 어트리뷰트 라우팅(Attribute routing) // Web API routes config.MapHttpAttributeRoutes(); [Route("api/store/books/{bookid}")] public Book GetBookByBookId(int bookid) { … }
  • 28. 어트리뷰트 라우팅(Attribute routing) [Route("api/info/books/{bookid:int}")] public Book GetInfoByBookId(int bookid) [Route("api/info/books/{bookid:alpha}")] public Book GetInfoByBookId(string bookid) [Route("api/info/books/{bookid:int?}")] public Book GetInfoByBookId(int bookid = 1) { … } [Route("api/info/books/{bookid:int=1}")] public Book GetInfoByBookId(int bookid) { … } 제약사항 옵션값 및 기본값
  • 31. • 웹에서 데이터 제어가 가능하게 하는 데이터 액세스 프로토콜 – 웹을 통해 데이터 소스에 대한 표준 CRUD 액세스를 제공 • Nuget 패키지 추가 – Microsoft.AspNet.WebApi.OData • [Queryable], IQueryable<T> • $top, $skip, $orderby, $filter, $select, $expand, $batch … OData(Open Data Protocol) 지원 // OData 활성화 [Queryable] public IQueryable<Product> GetProduct(…)
  • 33. • .NET 웹 서버와 웹 응용프로그램 사이의 표준 인터페이스를 정의 – 웹 응용프로그램을 서버와 분리 – IIS가 아닌 별도의 프로세스에서 웹 응용프로그램을 자체-호스트(Self-Host) • Nuget 패키지 추가 – Microsoft.AspNet.WebApi.OwinSelfHost • Microsoft.Owin.Host.HttpListener – OWIN 응용 프로그램을 자체 호스트하기 위한 HTTP 서버 제공 OWIN(Open Web Interface for .NET) 통합 string baseAddress = "http://localhost:9000/"; // Start OWIN host using (WebApp.Start<Startup>(url: baseAddress))
  • 35. • 처리되지 않은 대부분의 예외는 HTTP 상태 코드 500 응답 • 예외 처리 기법 – HttpResponseException • HttpResponseException 형식은 별개로 취급 (HTTP 응답 반환을 위해 설계됨) • 생성자에 지정한 HTTP 상태 코드를 반환 – Exception Filter • HttpResponseException 형식을 제외한 모든 유형의 처리되지 않은 예외에 대응 • 액션메소드 등록, 컨트롤러 등록, 전역 등록 – HttpError • 응답 본문에 오류 정보를 반환할 수 있는 일관된 방법 제공 • 강력한 형식의 모델과 동일하게 내용 협상 및 직렬화 처리 수행 오류 및 예외 처리
  • 37. • Global Error Handling • Attribute Routing Improvements • Help Page Improvements • IgnoreRoute Support • BSON Media-Type Formatter • Better Support for Async Filters • Query Parsing for the Client Formatting Library • Various bug fixes ASP.NET Web API 2.1
  • 39. RESTful 서비스의 가장 이상적인 플랫폼 ASP .NET Web API
  • 40. • ASP.NET Web API 공식 웹사이트 – http://www.asp.net/web-api • What's New in ASP.NET Web API 2.1 – http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21 • Taeyo.NET ASP.NET Web API 번역 아티클 – http://www.taeyo.net/Columns/View.aspx?SEQ=464&PSEQ=35 • Egocube.pe.kr ASP.NET Web API 번역 아티클 – http://www.egocube.pe.kr/Translation/Index/asp-net-web-api • Scott hanselman Blog – http://www.hanselman.com/ • Build RESTful API's with ASP.NET Web API – http://www.asp.net/web-api/tutorials/hands-on-labs/build-restful-apis-with-aspnet-web-api • Introduction to ASP.NET Web API – http://www.codeproject.com/Articles/549152/Introduction-to-ASP-NET-Web-API • ASP.NET Web API 2.0 and the new OData keywords – http://www.devcurry.com/2013/07/aspnet-web-api-20-and-new-odata-keywords.html#.Ukm2Hyuwf4a • 닷넷코리아 온라인 세미나 1회 – http://www.dotnetkorea.com/DotNetNote/BoardList.aspx?BoardName=Seminar 참고자료