[TechDays Korea 2013]에서 발표한 "ASP.NET Web API를 이용한 오픈 API 개발" 세션의 발표 자료입니다.
※ 이 자료는 업로드 시점 대비 오래전 진행한 내용을 다루고 있습니다. 변경된 부분이 있거나 유용하지 않을 수 있으니 참고 부탁드립니다.
2. 세션 소개
.NET 프레임워크 기반의 Web API 프레임워크인 ASP
.NET Web API에 대해서
알아보고, Web API 2.0의 새로운 기능 (어트리뷰트 라우팅, Odata 지원 등)에
대해서도 살펴봅니다.
이 기술을 사용하면 다양한 유형의 클라이언트에서 사용할 수 있는 RESTful
응용프로그램을 매우 쉽게 구축할 수 있습니다.
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 Service
기존 방식의 웹 접근과 RESTful API와의 요청 URI 차이
13. ASP
.NET Web API 특징
• HTTP 기반의 프로그래밍 모델 지원
• 간단하고 쉽게 HTTP 리소스 생성 가능
• HTTP 내용 협상(content negotiation)
• 공통 관심사(cross cutting concerns)의 분리
• 도움말 페이지(help page) 생성
• 유연한 호스팅(hosting)
• 가볍고, 테스트 가능하고, 확장이 가능함
16. 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 program
ming model
• HttpClient
• Task-based async
• Formatting, content ne
gotiation
• Server-side query compositi
on
• Create custom help pages
• Self-host
• Tracing
WCF Web API
20. ASP
.NET Web API 구현
• ApiController 를 상속받는 컨트롤러 생성
• 각각의 액션메서드 구현
– HTTP 메서드와 액션메서드의 접두사가 서로 매핑
• GetComment, PostComment
– 다른 이름을 선호하는 경우
• [HttpGET / Post / Put / Delete] 특성 사용
22. • 간단한 매개 변수는 URI를 통해서 바로 전달
– 라우트 데이터(Route data), 쿼리 파라미터(query parameters)
• 복합 형식(Complex Type)은 HTTP Body를 통해서 전달
– JSON, XML, Form 데이터는 기본으로 제공
• 사용자 정의 매개변수 바인딩(Custom parameter binding)
– [FromUrl], [FromBody], [ModelBinder] 등을 사용하여 재정의
액션 파라미터 (Action Parameter)
23. • 모든 요청(Request)에서 유효성 검사 실행
• 유효성 검사 오류는 ModelState 개체에 축적
– ModelState.IsValue
• DataAnnotation 또는 사용자 정의 유효성 검사 로직 사용
유효성 검사 (Validation)
24. • 응답 형식(Format)은 HTTP Content Negotiation에 따라서 결정
– [Accept] 헤더
• 서버의 응답 형식을 결정하는 요소
– 요청(Request), 액션메서드의 반환 형식, MediaTypeFormatter
• JSON과 XML 기본 제공
내용 협상 (Content Negotiation)
27. • 어트리뷰트 라우팅(Attribute routing)
• 향상된 테스팅 기능(IHttpActionResult)
• OData: $select, $expand, $batch
• 요청 일괄 처리
• OWIN(Open Web Interface for .NET) 통합
• Web API 보안 (CORS, OAuth 2.0, authn filters)
• 이식 가능한 Web API 클라이언트
ASP
.NET Web API 2 새로운 특징
28. • 중앙 집중식의 단점을 보완하고 직관적인 라우팅 설정
– 보다 유연하고 명확한 라우팅
• Attribute Routing 활성화
어트리뷰트 라우팅 (Attribute routing)
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
29. • 웹에서 데이터를 조회하고 수정할 수 있도록 주고 받는 웹(프로토콜)
• [Queryable], IQueryable<T>
• $top, $skip, $orderby, $filter, $select, $expand, $batch …
OData(Open Data Protocol) 지원
// OData 활성화
[Queryable]
public IQueryable<Product> GetProduct(…)
33. 우리 함께 해요!!
• Taeyo.NET
– http://www.taeyo.net
• ASP.NET Korea user Group
– https://www.facebook.com/groups/177323639028540/
• Microsoft ALM Korea
– https://www.facebook.com/groups/MicrosoftALMKorea/
34. • ASP.NET Web API 공식 웹사이트
– http://www.asp.net/web-api
• ASP.NET vNext Web API 2
– http://www.asp.net/vnext/overview/aspnet-web-api
• Taeyo.NET ASP.NET Web API 번역 아티클
– http://www.taeyo.net/Columns/View.aspx?SEQ=464&PSEQ=35
• Taeyo.NET Windows Azure 강좌
– http://www.taeyo.net/Columns/View.aspx?SEQ=409&PSEQ=33&IDX=1
• 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
참고자료