SlideShare a Scribd company logo
1 of 41
Download to read offline
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!!
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 구현하기 #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) { … }
제약사항
옵션값 및 기본값
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(…)
• .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))
• 처리되지 않은 대부분의 예외는 HTTP 상태 코드 500 응답
• 예외 처리 기법
– HttpResponseException
• HttpResponseException 형식은 별개로 취급 (HTTP 응답 반환을 위해 설계됨)
• 생성자에 지정한 HTTP 상태 코드를 반환
– Exception Filter
• HttpResponseException 형식을 제외한 모든 유형의 처리되지 않은 예외에 대응
• 액션메소드 등록, 컨트롤러 등록, 전역 등록
– HttpError
• 응답 본문에 오류 정보를 반환할 수 있는 일관된 방법 제공
• 강력한 형식의 모델과 동일하게 내용 협상 및 직렬화 처리 수행
오류 및 예외 처리
• 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 서비스 개발

More Related Content

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

Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
Sungjoon Yoon
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
Hyunghun Cho
 

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

리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3Do IoT Yourself 3rd : Open API - revision 3
Do IoT Yourself 3rd : Open API - revision 3
 
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
Booting Spring Data REST
Booting Spring Data RESTBooting Spring Data REST
Booting Spring Data REST
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
 
임태현, IIS with ASP.NET
임태현, IIS with ASP.NET임태현, IIS with ASP.NET
임태현, IIS with ASP.NET
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
우린 같은 곳을 바라 보고 있나요?
우린 같은 곳을 바라 보고 있나요?우린 같은 곳을 바라 보고 있나요?
우린 같은 곳을 바라 보고 있나요?
 
Restful web service
Restful web serviceRestful web service
Restful web service
 
어서 와~ ASP.NET Core는 처음이지?
어서 와~ ASP.NET Core는 처음이지?어서 와~ ASP.NET Core는 처음이지?
어서 와~ ASP.NET Core는 처음이지?
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
Progressive Web App(PWA) 테코톡 발표자료 - 마르코(장원석)
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
Naver 오픈api-마이그레이션가이드 20160913-리뷰
Naver 오픈api-마이그레이션가이드 20160913-리뷰Naver 오픈api-마이그레이션가이드 20160913-리뷰
Naver 오픈api-마이그레이션가이드 20160913-리뷰
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 

More from SangHoon Han

More from SangHoon Han (17)

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

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 차이
  • 11.
  • 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) 페이지
  • 25.
  • 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) { … } 제약사항 옵션값 및 기본값
  • 29.
  • 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(…)
  • 32.
  • 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))
  • 34.
  • 35. • 처리되지 않은 대부분의 예외는 HTTP 상태 코드 500 응답 • 예외 처리 기법 – HttpResponseException • HttpResponseException 형식은 별개로 취급 (HTTP 응답 반환을 위해 설계됨) • 생성자에 지정한 HTTP 상태 코드를 반환 – Exception Filter • HttpResponseException 형식을 제외한 모든 유형의 처리되지 않은 예외에 대응 • 액션메소드 등록, 컨트롤러 등록, 전역 등록 – HttpError • 응답 본문에 오류 정보를 반환할 수 있는 일관된 방법 제공 • 강력한 형식의 모델과 동일하게 내용 협상 및 직렬화 처리 수행 오류 및 예외 처리
  • 36.
  • 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 참고자료