Thứ Hai, 24 tháng 10, 2016

Extend of a Servlet class and life cycle

1. Sự kế thừa của Servlet:



 - Gói javax.servlet chứa một lớp trừu tượng tên là GenericServlet.


 - Các GenericServlet kế thừa từ lớp Object và giúp thiết kế một giao thức servletđộc lập.

 - Các GenericServlet thực hiện ba giao diện:


 + Servlet: Nó định nghĩa các phương pháp vòng đời cho một Servlet.


 + ServletConfig: Nó định nghĩa các phương pháp được sử dụng bởi trình chứaServlet để chuyển thông tin đến một trường hợp Servlet trong quá trình khởi của nó.


 + Serializable: Nó được định nghĩa trong gói java.io để tuần tự các trạng

 thái của một đối tượng.

 - Các đoạn mã cho thấy làm thế nào để tạo ra một servlet đăng nhập giao thức độc lập:


 - Trong đoạn code cho trước, lớp có tên LoginServlet  một servlet chung.


 - Để phát triển một servlet mà chỉ được truy cập thông qua một trình duyệt web,người dùng có thể tạo ra một Servlet HTTP bằng cách mở rộng HttpServlet lớp.


 - Lớp HTTPServlet là một lớp con của GenericServlet và cho phép tạo ra mộtServlet dựa trên HTTP như là một phần của một ứng dụng Web.


 - Các đoạn mã cho thấy sự sáng tạo của servlet đăng nhập để được truy cập trên trang web:



 - Trong đoạn mã nhất định, LoginServlet được định nghĩa là HTTP servletvì vậy nó sẽ được truy cập thông qua giao thức HTTP.



2.Life Cycle



- Vòng đời của Servlet có thể được định nghĩa như là một tiến trình đầy đủ từ khi được tạo ra đến khi bị hủy. Một Servlet theo các giai đoạn sau:
 + Servlet được khởi tạo bởi gọi phương thức init().
+ Servlet gọi phương thức service() để xử lý một yêu cầu từ Client.
+ Servlet bị hủy bởi triệu hồi phương thức destroy().

+ Cuối cùng, servlet trở thành rác và được thu thập bởi Garbage Collector của JVM

- init():

+ Phương thức được thiết kế để chỉ được gọi một lần. Nó được gọi khi Servlet lần đầu được tạo, và không được gọi lại cho mỗi yêu cầu của người dùng. Vì thế, nó được sử dụng cho các khởi tạo one-time, giống như phương thức init của Applet.
+ Thường thì, Servlet được tạo khi một người dùng lần đầu triệu hồi một URL tương ứng với Servlet đó, nhưng bạn cũng có thể xác định rằng Servlet này được tải khi Server được khởi động lần đầu.
+ Khi một người sử dụng triệu hồi một Servlet, một đối tượng đơn của Servlet được tạo, với mỗi yêu cầu từ người dùng, là kết quả trong một thread mới, mà được thao tác tới doGet hoặc doPost một cách thích hợp. Phương thức init() tạo hoặc tải một vài dữ liệu mà sẽ được sử dụng qua vòng đời của Servlet đó.
public void init() throws ServletException {
}

service():

+ Phương thức service() là phương thức chính để thực hiện tác vụ thực sự. Nơi chứa servlet (ví dụ như Web Server) gọi phương thức service() để xử lý các yêu cầu từ Client (hoặc trình duyệt) và viết phản hồi đã được định dạng trở lại Client đó.

+ Mỗi khi Server nhận một yêu cầu cho một Servlet, thì Server tạo một Thread mới và triệu hồi service(). Phương thức service() kiểm tra kiểu yêu cầu HTTP (Kiểu GET, POST, PUT, DELETE,...) và gọi các phương thức doGet, doPost, doPut, doDelete,... tương ứng một cách thích hợp.

public void service(ServletRequest request, ServletResponse response) 
      throws ServletException, IOException {
}

doGet():

Một yêu cầu GET, là kết quả từ một yêu cầu chuẩn cho URL hoặc từ một HTML form, mà không có PHƯƠNG THỨC nào được xác định và nó nên được xử lý bởi phương thức doGet().
public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}

- doPost():

Một yêu cầu POST, là kết quả từ một HTML form mà liệt kê POST như là PHƯƠNG THỨC, và nên được xử lý bởi phương thức doPost():
public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}

-  destroy():
+ Phương thức destroy() chỉ được gọi một lần ở giai đoạn cuối trong vòng đời Servlet. Phương thức này giúp servlet của bạn một cơ hội để đóng các kết nối tới Database, dừng thread, viết các danh sách cookie hoặc viết tính toán trên đĩa, và thực hiện các hoạt động cleanup khác.
+ Sau khi phương thức destroy() được gọi, đối tượng servlet này được đánh dấu cho Garbage Collector. Phương thức này trông giống như sau:
  public void destroy() {
    // Finalization code...
  }

CI + Jenkin

I.CI
1. Định nghĩa:
- Continuous Integration (CI) là một thực hành kỹ thuật phần mềm, trong đó thay đổi cách ly ngay lập tức kiểm tra và báo cáo khi chúng được thêm vào một cơ sở mã lớn hơn. Mục tiêu của CI là cung cấp thông tin phản hồi nhanh chóng do đó nếu một lỗi được đưa vào các cơ sở mã, nó có thể được xác định và sửa chữa càng sớm càng tốt. công cụ phần mềm tích hợp liên tục có thể được sử dụng để tự động kiểm tra và xây dựng một đường mòn tài liệu.
- CI có nguồn gốc từ bên trong lập trình cực mô nhưng các nguyên tắc có thể được áp dụng cho bất kỳ mô hình lập trình lặp đi lặp lại, chẳng hạn như lập trình nhanh nhẹn.Phương pháp tiếp cận phát triển truyền thống, chẳng hạn như cácmô hình thác nước có thể được hưởng lợi từ việc sử dụng các phương pháp CI cho giai đoạn xây dựng.
2. Cấu trúc:

3. Tích hợp liên tục kết hợp với phát triển theo hướng kiểm thử phù hợp với phương pháp agile:

CI – tích hợp liên tục là phương pháp mà các team Agile sử dụng để đảm bảo code của toàn dự án luôn build được, luôn chạy đúng (Pass toàn bộ các test case). Hiện tại, hầu như các công ty phần mềm đều áp dụng CI, thông qua một số framework như: TFS, TeamCity, Hudson, Jenkin, Travis,...

4. Đem lại:
- Giảm thiểu rủi ro do lỗi được phát hiện sớm.

- Giảm thiểu sự lặp lại cho các quá trình

- Tạo phần mềm có giá trị sử dụng sớm nhất có thể và sẳn sàng triểnkhai mọi lúc mọi nơi.

- Cung cấp cái nhìn xuyên suốt tổng quan và cụ thể cho từng giai đoạn.

- Nâng cao kỹ năng của đội ngũ nhân viên phát triển phần mềm.

- Cải thiện chất lượng phần mềm.

5. Kết:

CI giúp các nhóm làm việc hiệu quả hơn. Các nhóm này có thể có chức năng liên quan làm việc cùng nhau. Họ có thể làm việc ở những nơi khác nhau, bởi vì công việc tích hợp không ngừng sẽ đảm bảo rằng bạn không đi lệch các thiết kế. Nó giải quyết vấn đề sớm mà các nhóm phát triển theo phương pháp agile có thể đã trải qua nếu không tích hợp liên tục.

II.Jenkin

1. Định nghĩa Jenkin:

Là một ứng dụng web application mã nguồn mở (được cộng đồng phát triển theo giấy phép MIT) đóng vai trò máy chủ build & test của hệ thống tích hợp liên tục. - Jenkins được viết bằng Java nên Jenkins có thể kết hợp được với hầu hết các công cụkhác của hệ thống tích hợp liên tục với nhiều nền tảng khác nhau và đặc biệt là tảngmobi application (android).- Tiền thân là Hudson được viết bởi Kosuke Kawaguchi tại Sun, kể từ khi Sun được mualại bởi Oracle vào năm 2010, một bộ phận phát triển Hudson đã tách ra phát triển riêngvà được đặt tên là Jenkins. - Được sử dụng rộng rãi và được phát triển cải tiến liên tục bởi cộng đồng mã nguồn mở.

2. Đem lại:

- Là trái tim của CI


- Tất cả với Jenkins hầu như là tự động.

- Giảm thời gian và chi phí.
- Nâng cao năng lực nhân viên?
- Có thể tóm gọn lợi ích Jenkins mang lại là FESS.

 + Faster.

+ Easier.

+ Safer.

+ Smarter.

Chủ Nhật, 23 tháng 10, 2016

Strust Framework

I.  Định nghĩa Strust Framework

- Strust là một framework phục vụ việc phát triển các ứng dụng Web trên Java. Strust cung cấp một framework thống nhất để triển khai các ứng dụng Servlet và JSP sử dụng kiến trúc MVC, Sử dụng mẫu thiết kế MVC, Strust giải quyết được rất nhiều các vấn đề liên quan đến các ứng dụng Web hướng business đòi hỏi hiệu năng cao sử dụng Java Servlet và JSP. Strust cơ bản định hình lại cách các web programmer nghĩ về và cấu trúc một ứng dụng web

- Strust được phát triển bởi Craig McClanahan và được bảo trợ bởi Apache, nhóm Jakarta

II. Tiên trình thực thi mô hình MVC của Strust
* Mô tả tiến trình mà hầu hết các ứng dụng struts phải tuân theo
Tiến trình này có thể được chia thành 5 bước cơ bản sau:

1. Một request được gửi đến từ view

2. ActionServlet sẽ tiếp nhận request này, phân tích, kiểm tra. Sau đó chỉ định cho Action tương ứng thực thi yêu cầu, tính toán những tác vụ cần thiết.
ActionServlet đóng vai trò là Controller

3. Action sẽ thao tác và xử lí trên Model của ứng dụng

4. Mỗi khi Action hoàn thành việc thao tác và xử lí, nó trả quyền điều khiển về cho ActionServlet kèm theo một key gắn kèm với kết quả trả về. ActionServlet sẽ dựa vào key này mà quyết định xem các kết quả trả về sẽ được hiển thị như thế nào.

5. ActionServlet trả lời bằng cách gửi lại một request cho view là một liên kết đến kết qua trả về của Action thông qua key trên. Sau đó, view làm nốt công việc trình bày kết quả.


III. Cấu trúc của Struts
•    Một hoặc nhiều Action, mỗi action trong trang web sẽ ánh xạ chính xác đến một thành phần <action> được định nghĩa trong file struts-config.xml. Action được triệu gọi bởi người dùng từ một trang HTML hoặc JSP thông qua một liên kết hay thông qua thuộc tính action trong thẻ <form>. 
•    Một thành phần <action> sẽ định nghĩa một lớp ActionForm, trong một số trường hợp, nó sẽ được sử dụng để validate(xác nhận) các dữ liệu trong form được submit bởi người sử dụng. Nó cũng định nghĩa lớp Action nào sẽ được sử dụng để xử lý các yêu cầu từ phía người dùng.
•    Một lớp ActionForm có thể sử dụng một hoặc nhiều forward được định nghĩa trong thẻ <action> đề nói cho một ActionServlet trả về các response tương ứng với các request của người dùng. Chúng ta có thể định nghĩa nhiều forward trong thẻ <action-mapping>. 


IV. Các thành phần chính của một ứng dụng struts:

1. Struts Model Components
- Model là một thành phần được cho là quan trọng nhất trong các ứng dụng MVC.
- Model bao gồm các business entities và một tập các qui tắc để quản lí việc tổ chức và thao tác dữ liệu.
- Struts không cung cấp các Model Component chuyên dụng, tuy nhiên chúng ta có thể sử dụng lại các Model của các ứng dụng khác hoặc tự xây dựng các model của riêng mình.

2. Struts View Components
- Mục đích của thanh phần Struts View này cũng giống y như một thành phần view trong các ứng dụng theo mô hình MVC: chịu trách nhiệm trình bày thông tin được cung cấp bởi Model.
- Struts sử dụng JSP để thiết kế thành phần View. Ngoài ra, để hỗ trợ và mở rộng khả năng của View, chúng ta cũng có thêm thư viện Taglib, sử dụng HTML, JS… cho mục đích trình bày thông tin.

3. Struts Controller Components

- Struts cung cấp hai thành phần rất quan trọng đó là ActionServlet và Action để điều khiển và quản lí mọi yêu cầu của người dùng cũng như việc thao tác với dữ liệu

- ActionServlet chịu trách nhiệm nhận và xử lí các request từ phía người dùng, chỉ định Action thực thi tương ứng với từng yêu cầu cụ thể.

- Action chịu trách nhiệm thao tác với Model, nó kết hợp rất chặt chẽ với ActionServlet. Cả hai thành phần này đóng vai trò làm Controller trong Struts.

- Struts taglib cung cấp một tập các tag library cho việc phát triển ứng dụng, bao gồm cả các taglib hỗ trợ thiết kế HTML và JSP taglib.

- Struts Config: 
File cấu hình của ứng dựng Struts.

V. Thư viện thẻ Struts để xây dựng các thành phần trình diễn trong một ứng dụng: 
- <templete>: cung cấp cho nhà phát triển ứng dụng một tập các thẻ JSP để chia nhỏ giao diện người dùng thành các thành phần có thể dễ dàng tháo rắp. 
- <bean>: cung cấp cho nhà phát triển ứng dụng một tập các thẻ JSP để quản lý đầu ra từ một JavaBean. 
- <logic>: có thể được sử dụng để ứng dụng các điều kiện logic trong một trang JSP. 
- <html>: có thể sử dụng để tạo ra các thành phần form 

VI. Các thành phần cơ bản của Strust
* Struts là một tập hợp các thư viện Java và có thể chia ra làm các nhóm sau:
- Framework cơ sở
- Thư viện thẻ JSP
- Tiles plugin
- Validator plugin

a. Framework cơ sở
Framework cơ sở cung cấp các tính năng MVC cốt lõi. Nền tảng của framework cơ sở là Controller servlet: ActionServlet. Phần còn lại của framework cơ sở bao gồm các lớp cơ sở mà ứng dụng của bạn sẽ extend và các class tiện ích. Nổi bật nhát trong các lớp cơ sở là lớp Action và lớp ActionForm. Lớp Action được sử dụng bởi ActionServlet để sử lý các request xác định. Lớp ActionForm được sử dụng để capture dữ liệu từ các HTML form và được sử dụng để chuyển dữ liệu trở lại View để generate response.

b. Thư viện thẻ JSP
Struts đưa ra các thư viện thẻ để hỗ trợ việc lập trình View logic trong JSP. Các thư viện thẻ JSP cho phép các JSP author sử dụng các thẻ giống HTML.

+ HTML: Sử dụng để generate các THML form tương tac với Struts API
+ Bean: Sử dụng để làm việc với các Java bean object trong JSP
+ Logic: Sử dụng để implement các logic điều kiện đơn giản trong JSP
+ Nested: Sử dụng để cho phép các mức nested tùy ý

c. Tiles plugin
Tiles là một JSP template framework giúp thuận tiện cho việc tái sử dụng mã HTML.

d. Validator plugin
Validator là một framework với khả năng thực hiện xác nhận tính hợp lệ của dữ liệu ở cả phía server và client.

* Chu kì sống của một Struts


Trước khi đi vào chi tiết các lớp, nghía qua một chút về tiến trình thực hiện của một ứng dụng Web sử dụng Struts cũng có lẽ không thừa.

1. Trình duyệt tạo một request tới ứng dụng Struts sẽ được xử lý bới ActionServlet (Controller).

2. ActionServlet (Controller) populate subclass của ActionForm (View), do ta viết, với dữ liệu form HTML và invoke method validate() của nó.

3. ActionServlet (Controller) execute subclass của Action do ta viết (Controller).

4. Subclass của Action (Controller) đó sẽ tương tác với model component và chuẩn bị dữ liệu cho để hiển thị.

5. Sau đó subclass của Action (Controller) đó sẽ chuyển điều khiển tới JSP (View).

6. JSP (View) sử dụng dữ liệu nhận được để generate response về cho trình duyệt.


VII. Ưu điểm của Struts (so với MVC sử dụng requestDispatcher):

- Struts 2 được xây dựng và phát triển dựa trên nền tảng mô hình MVC nên nó thừa hưởng được đầy đủ các ưu điểm mà mô hình MVC đem lại.

- Dễ dàng tùy chỉnh (customize) chu kỳ xử lý (request lifecycles ) cho từng action

- Giải quyết hiệu quả vấn đề internationlization và localization trong các ứng dụng web

- Tự động chuyển đổi kiểu dữ liệu chuỗi truyền thống trong tham số request parameter thành các đối tượng lớp dữ liệu java => tiết kiệm được thời gian và công sức cho các lập trình viên

- Cung cấp các thẻ tag,các themes và templates giúp cho việc làm giao diện GUI trở nên dễ dàng,nhanh lẹ và tăng tính tái sử dụng.

- Tính mở rộng (Extensibility) cao thông qua việc hỗ trợ các plug-in

- Hỗ trợ portal.

- Hỗ trợ AJAX

- Dễ dàng tích hợp với Spring framework(*) và Hibernate.

VIII. Nhược điểm của Strust
 Để sử dụng MVC với chuẩn RequestDispatcher, ta cần nghiên cứu sâu với chuẩn JSP và Servlet APIs. Để sử dụng MVC với Struts, ta còn phải hiểu rõ cả framework rộng lớn và phức tạp, nó tương tự như việc tìm hiểu cả cái cốt lõi của hệ thống. Điều bất lợi này đặc biệt đáng kể với những dự án nhỏ, những dự án có ít thời gian để thực hiện, và những lập trình viên có ít kinh nghiệm; ta mất rất nhiều thời gian trong việc nghiên cứu Struts khi thực hiện đề án. 

CRUD

B1: Tạo project




B2: tạo 2 packages và đặt tên là entity.example.com và session.example.com 


B3:Tạo các view và controller 


B4: Gọi Enterpise Bean trong servlet







 B5: thêm,sửa,xóa












Thứ Năm, 13 tháng 10, 2016

Web Services + RESTful

1. Khái niệm

*Web Services:

- Là những thành phần ứng dụng dùng để chuyển đổi một ứng dụng thông thường sang một ứng dụng web. Đồng thời nó cũng xuất bản các chức năng của mình để mọi người dùng internet trên thế giới đều có thể sử dụng thông qua nền tảng web. Web Serviece truyền thông bằng cách sử dụng các giao thức mở, tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thực hiện các chức năng và đưa ra các thông tin người dùng yêu cầu, các ứng dụng độ lập và tự mô tả chính nó. Nó bao gồm các modun độc lập cho hoạt động của khác hàng và doanh nghiệp và bản thân nó được thực thi trên server. Nền tảng cơ bản của WS là XML + HTTP. Bất cứ một ứng dụng nào cũng đều có thể có một thành phần WS. WS có thể được tạo ra bằng bất kỳ một ngôn ngữ lập trình nào.

- Gồm 2 loại:

JAX-RPC

JAX-WS

Mặc dù có nhiều ưu điểm : Có nhiều mô-đun và có thể công bố lên internet, khả năng hoạt động rộng lớn với phần mềm khác nhau chạy nền tảng khác nhau, sử dụng các giao thức chuẩn mở, nâng cao khả năng tái sử dụng, cho phép các tiền trình / chức năng nghiệp vụ đóng gói trong giao diện dịch vụ web, dễ dàng cho việc phát triển các ứng dụng phân tán. Nhưng những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của dịch vụ web, có quá nhiều chuẩn cho dịch vụ web khiến người dùng khó nắm bắt, phải quan tâm nhiều hơn tới vấn đề an toàn và bảo mật.


*RESTful:

- REST là viết tắt của cụm từ Representational State Transfer (đôi khi còn được viết là ReST) là một kiểu kiến trúc được sử dụng trong việc giao tiếp giữa các máy tính (máy tính cá nhân và máy chủ của trang web) trong việc quản lý các tài nguyên trên internet.

- REST được đưa ra để áp dụng cách xây dựng và cơ thế thực hiện web service đơn giản hơn. Cho phép người dùng truy cập tài nguyên – resource (có thể là dữ liệu trước và sau xử lý hay chức năng của ứng dụng) - của ứng dụng trên web services thông qua uri.

2. Nền tảng của WS và RESTful

*Web Services:

WS có nền tàng dựa trên 3 thành phần SOAP, WSDL, và UDDI :

 - SOAP: SOAP là viết tất của Simple Object Access Protocol. SOAP là một giao thức dựa trên nền XML cho phéo ứng dụng trao đổi các thông tin thông qua HTTP. Nói cụ thể hơn thì SOAP là một giao thức dùng để truy cập các dịch vụ web.

- WSDL: WSDL là viết tắt của Web services Description language dùng để định vị và mô tả WS. WSDL định nghĩa cách mô tả web service bao gồm: Tên service, Giao thức và kiểu mã hóa, Các loại thông tin, Mô tả giao diện và giao thức kết nối.

- UDDI: UDDI là viết tắt của Universal Description, Discovery and integration thư mục tìm kiếm các dịch vụ web. UDDI giao tiếp thông qua SOAP và góp phần vào nền tảng Microsoft .NET.

 Sơ đồ cơ chế hoạt động:

*RESTful:

- RESTful sử dụng các phương thức chuẩn: GET, PUT, DELETE, POST:

+ GET: Sử dụng GET theo cách này rất rõ ràng vì GET chỉ dành cho truy cập dữ liệu. GET không thay đổi giá trị của resource.

+ PUT: Sử dụng để cập nhật dữ liệu của resource. Dữ liệu được cập nhật bằng cách xác định resource bằng URI. Nếu không tồn tại resource nó sẽ tạo ra một resource mới.

+ DELETE: Sử dụng để xóa resource bởi URI.

+ POST: Sử dụng để tạo ra một resource mới.


- Thực hiện cơ chế nói chuyện giữa server và client là điểm điểm – point to point. Dữ liệu được truyền trực tiếp trên HTTP và được truy cập thông qua HTTP theo đúng định dạng MIME mà không cần thông qua dạng SOAP – giảm bớt sự phức tạp – vì đơn giản chúng ta sẽ coi dữ liệu và chức năng như là tham số truyền hay dữ liệu đính kèm trong HTTP.

3.Web Service Security

- Web Service Security là một chuẩn an toàn cho SOAP và cả những phần mở rộng của SOAP, nó được dùng khi muốn xây dựng những web service đảm bảo và tin cậy. Web Service Security đảm bảo cho tính an toàn, sự toàn vẹn thông điệp và tính tin cậy của thông điệp.

- Phương thức hoạt động:

+ Máy chủ chỉ rõ những thành phần của thông điệp cần được ký, nếu thông điệp đến không có một chữ ký hợp lệ thì yêu cầu thất bại. Chỉ rõ một khóa để duyệt chữ ký của thông điệp đến xem có hợp lệ hay không. Chỉ rõ giải thật mà khóa sử dụng để đảm bảo toàn vẹn thông điệp gửi đến. Thông điệp phản hồi phải được ký và cung cấp thông tin chữ ký khi phản hồi.

 Máy khách chỉ rõ những thành phần của thông điệp mà phải có chữ ký hay một dấu hiệu chứng thực nào đó. Chỉ rõ một khóa trên hệ thông tập tin mà sẽ ký lên thông điệp và chỉ những máy được cấp quyền mới có quyền sở hữu khóa này. Chỉ rõ những giải thuật sẽ được sử dụng bởi khóa để ký lên thông điệp.


- Một số các Web Service Security:  XACML, SAML, XrML, SSL,...

4. Kết

*Web Services: 

Mặc dù có nhiều ưu điểm có nhiều mô-đun và có thể công bố lên internet, khả năng hoạt động rộng lớn với phần mềm khác nhau chạy nền tảng khác nhau, sử dụng các giao thức chuẩn mở, nâng cao khả năng tái sử dụng, cho phép các tiền trình / chức năng nghiệp vụ đóng gói trong giao diện dịch vụ web, dễ dàng cho việc phát triển các ứng dụng phân tán. Nhưng những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của dịch vụ web, có quá nhiều chuẩn cho dịch vụ web khiến người dùng khó nắm bắt, phải quan tâm nhiều hơn tới vấn đề an toàn và bảo mật.

*RESTful:

-Thiết kế giao diện RESTful, XML so với HTTP là một giao diện vượt trội cho phép các ứng dụng bên trong, như các giao diện người dùng dựa trên Asynchronous JavaScript + XML (Ajax), dễ dàng kết nối, xác định, và tiêu thụ tài nguyên.

- Đưa một tài nguyên hệ thống thông qua một RESTful API là một cách linh động để cung cấp các loại ứng dụng khác nhau với dữ liệu đã được định dạng theo cách tiêu chuẩn. Nó giúp đáp ứng các yêu cầu tích hợp, điều rất quan trọng để xây dựng hệ thống khi dữ liệu được kết hợp dễ dàng (mashups) và để mở rộng hoặc xây dựng trên một gói hệ thống căn bản.

- REST không phải là sự lựa chọn luôn đúng. Đã có trường hợp khi thiết kế Web service, nó có sự kém độc lập đối với phần mềm trung gian (ví dụ: một ứng dụng máy chủ) so với loại dựa trên SOAP hặc WSDL.