SlideShare a Scribd company logo
1 of 34
دانشگاه بناب 
RESTFUL 
استاد راهنما: مهندس غلامعلی نژاد حاجعلی ایرانی 
ارائه دهنده: سعید ستاری
مقدمه 
REST معرفی 
REST قوانین 
REST مشخصات 
بررسی یک سیستم واقعی 
JAX-RS معرفی 
JAX-RS مفاهیم 
3 / 28 REST 
فهرست
Representational State Transfer • 
/ 28 REST 
REST معرفی 
4 
Make Ant Maven 
در سال 2000 Roy Fielding • معرفی شده توسط 
Word Wide Web • یک مدل معماری برای سیستم های توزیع شده مانند
/ 28 REST 
REST قوانین 
5 
همه چیز به صورت منابع می باشند 
Customer, Locations, Item, List of users : • مثال 
منابع دارای معین کننده هویت می باشند 
URIs for web : • مثال 
واسط یکنواخت برای دسترسی به منابع 
HTTP methods (GET, POST, PUT, DELETE, HEAD): • مثال 
منابع دارای نماینده می باشند 
XML, JSON, Binary : • مثال 
می شوند Link منابع با یکدیگر 
Hyperlinks: • مثال 
1 
2 
3 
4 
5
/ 28 REST 
REST مشخصات 
6 
Cacheable Stateless 
لایه بندی 
ساده نیازی به 
مکانیزم پی بری 
اضافی ندارد
/ 28 REST 
بررسی یک سیستم واقعی 
7 
(Bug System Tracking) سیستم 
خطاها پیگیری خطا 
summary, priority, user who reported it 
کاربران 
User name
UML Notation: 
Generalization / 
inheritance 
/ 28 REST 
بررسی یک سیتم واقعی 
8 
UML Notation: 
“whole-part” relationship (composition) 
“part” is exclusively owned by “whole” 
UML Notation: 
One-way association
بررسی یک سیستم واقعی-منابع و مشخص کننده ها 
همه چیز یک منبع می باش1د 
Identifiers Note 
http://<host>/users All users 
http://<host>/users/{userId} A particular user 
http://<host>/bugs All bugs 
http://<host>/bugs/{bugId} A particular bug 
http://<host>/bugs/{bugId}/notes All notes for a particular bug 
http://<host>/bugs/{bugId}/notes/{not 
eId} 
A particular note for a particular bug 
/ 28 REST 
9 
• منابع 
User,Bug,Note • 
All users, All bugs, All notes for a particular bug • 
• مشخص کننده ها 
مشخص کننده ها هستند 2
/ 28 REST 
واسط های یکنواخت 
10 
HTTP • متدهای 
HTTP verb Meaning Safe? Idempotent? Cacheable? 
POST Create* 
GET Retrieve 
PUT Update* 
DELETE Delete 
معانی دیگری هم دارند PUT و POST)*( 
)PASTE AFTER( می تواند برای به روز رسانی جزی و یا اضافه کردن چیزی به منابع استفاده شود POST 
PASTE ( آن را می شناسیم فرستاده شوند URI استفاده شود اگر تمام محتوی منابع تعیین شده که create می تواند به عنوان PUT 
)OVER
بررسی یک سیستم واقعی-واسط یکنواخت 
/ 28 REST 
11 
توضیحات عملیات 
GET http://<host>/users ها user لیست تمام 
POST http://<host>/users جدید user ساخت 
GET http://<host>/users/ بخصوص 345 user بازیابی یک 
PUT http://<host>/users/ بخصوص 345 user اصلاح یک 
DELETE http://<host>/users/ بخصوص 345 user حذف یک 
توضیحات عملیات 
GET http://<host>/bugs/234/notes لیست تمام متن های خطای 234 
POST http://<host>/bugs/234/notes ساخت یک متن جدید برای خطای 234 
[GET | PUT | DELETE] .../bugs/234/notes/ [بازیابی] اصلاح [حذف ] یک متن خطای 34 
234 
واسط یکنواخت برای دسترس 3ی به منابع
بررسی یک سیستم واقعی-نمایش ها و منابع لینک شده 
/ 28 REST 
12 
: XML • نمایش در 
GET http://localhost:9000/bugs/1/notes/1 
Content-type: application/xml 
<Note href=“http://localhost:9000/bugs/1/notes/1 "> 
<description>It is really 
broken</description> 
<owner>http://localhost:9000/users/1</owner> 
</Note> 
POST http://localhost:9000/bugs 
Content-type: application/json 
{ 
"Bug" : { 
"priority" : "P1", 
"reporter" : "http://localhost:9000/users/1", 
"summary" : "Something is wrong" 
} 
} 
منابع دارای نماینده می با4شند 
: JSON • نمایش در 
می 5 شوند Link منابع با یکدیگر
/ 28 REST 
JAX-RS معرفی 
13 
وب سرویس RESTFul جاوا برای API : JAX-RS
/ 28 REST 
JAX-RS مفاهیم کلیدی 
14 
• کلاس های منابع 
یا متدهای @Path • کلاس های جاوایی که حداقل دارای یک متد با حاشیه نویسی 
@GET , @PUT, @POST ی@ ا,ت Dح E هL خE رT چE • 
• با توجه به قرارداد یک منبع جدید کلاس برای هر 
درخواست ساخته می شود 
دیگر پیاده سازی های چرخه حیات را محدود نمی JSR • 
• متدهکاندی منابع 
از یک کلاس منبع توسط متد درخواست نقش دهنده حاشیه نویسی Public • یک متد 
(@GET, @PUT, @POST, @DELETE, @OPTIONS, @HEAD) می شود 
• کلاس های مهیا 
interface حاشیه نویسی می شوند و با یک یا چند @Provider • کناینن دکلا هس ها توسط 
پیاده سازی می شوند JAX-RS 
MessageBodyReader/MessageBodyWriter • 
ExceptionMapper • 
ContextResolver •
حاشیه نویسی های پرکاربرد / JAX-RS مفاهیم 
/ 28 REST 
15 
شرح هدف حاشیه نویسی 
@Path Class or Method منسوب به مسیر یک منبع 
@Consumes 
@Produces 
Class or Method لیستی از نوع های واسط ها که توانایی تحلیل و تولید کند 
@GET 
@POST 
@PUT 
@DELETE 
@OPTIONS 
@HEAD 
Method بکار برده شده توسط حاشیه نویسی متد HTTP افعال 
@PathParam Parameter (also 
field, POJO method) 
استخراج شود URI ارزشی که می تواند توسط
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
پایه که متصل می URI 
شود به منبع
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
برای متد HTTP متد 
getUser()
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
قطعه / URI مسیر 
پارامتر
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
GET …/users/{id}
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
مقدار و نوع را بر می 
گرداند
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
را در URI ارزش قسمت 
انتقال می دهد id پارامتر
@Path("/users") 
public class UserHandler { 
@GET 
@Path("{id}") 
@Produces("application/xml”) 
public JaxbUser getUser(@PathParam("id") long id) { 
/ 28 REST 
JAX-RS مثالی از 
16 
... 
} 
GET http://localhost:9000/users/2 
Content-Type: application/xml 
<?xml version="1.0" encoding="UTF-8"?> 
<User> … </User>
23 / 28 REST
/ 28 REST 
مباحث پیشرفته 
18
@Path and regular expression mapping / مباحث پیشرفته 
•@Path(path-expression) 
"{" variable-name [ ":" regular-expression ] "}“ 
• Examples 
• @Path("example2/{var:.+}") matches following: 
/ 28 REST 
19 
• …/example2/a 
• …/example2/a/b/c 
• @Path("example3/{var:d+}") matches following: 
• …/example3/345 
• …/example3/23 
• @Path(“example4/{name}-{id}”) matches following: 
• …/example4/a-1 
• …/example4/a----1
@[Query|Header|Matrix|Cookie|Form]Param / مباحث پیشرفته 
• @QueryParam 
/ 28 REST 
20 
• For example …/query?sorted=true 
@GET 
@Path("query") 
public String queryParamExample(@QueryParam(“sorted") 
String var) { 
return var; 
} 
• @MartixParam 
• For example …/users;sorted=true 
• @HeaderParam 
• For example “Date” header 
• @CookieParam / @FormParam
package javax.ws.rs.ext 
public interface ExceptionMapper<E extends 
Throwable> { 
/ 28 REST 
Exception Mappers / مباحث پیشرفته 
21 
Response toResponse(E exception); 
}
MessageBodyReader / مباحث پیشرفته 
package javax.ws.rs.ext 
public interface MessageBodyReader<T> { 
/ 28 REST 
22 
boolean isReadable(Class<?> type, Type genericType, 
Annotation annotations[], MediaType mediaType); 
T readFrom(Class<T> type, Type genericType, 
Annotation annotations[], MediaType mediaType, 
MultivaluedMap<String, String> httpHeaders, 
InputStream entityStream) throws IOException, 
WebApplicationException; 
}
package javax.ws.rs.ext 
public interface MessageBodyWriter<T> { 
boolean isWriteable(Class<?> type, Type genericType, 
/ 28 REST 
MessageBodyWriter / مباحث پیشرفته 
23 
Annotation annotations[], MediaType mediaType); 
long getSize(T t, Class<?> type, Type genericType, Annotation annotations[], 
MediaType mediaType); 
void writeTo(T t, Class<?> type, Type genericType, Annotation annotations[], 
MediaType mediaType, 
MultivaluedMap<String, Object> httpHeaders, 
OutputStream entityStream) throws IOException, WebApplicationException; 
}
/ 28 REST 
مباحث پیشرفته 
JAX-RS ویژگی های دیگر  
24 
@Encoded 
@Applica 
tionPath 
Cookies 
Security 
Context 
CacheControl 
Application 
Complex 
negotiation 
/ Varian 
Integration 
with Spring 
t processing Security 
@OPTIONS, 
@HEAD, 
@HttpMethod 
PathSegment
/ 28 REST 
مباحث پیشرفته 
25 
ویژگی های بیشتر 
WADL 
Restful java clients 
REST support in Spring 
3.0
• Apache CXF (JAX-RS part):http://cxf.apache.org/docs/jax-rs.html 
• RESTEasy users guides: 
http://docs.jboss.org/resteasy/docs/1.1.GA/userguide/pdf/RESTEasy_Reference_ 
Guide.pdf 
• WizTools REST Client:http://code.google.com/p/rest-client/ 
/ 28 REST 
منابع 
26
33 / 28 REST با تشکر از تمامی حضار
28 / 28 REST 
؟؟ سوال؟؟

More Related Content

Similar to Restful in Java

متغیرهای
متغیرهایمتغیرهای
متغیرهای
Hazar Mir
 
Herat University Library Management System Persian User Manual
Herat University Library Management System Persian User ManualHerat University Library Management System Persian User Manual
Herat University Library Management System Persian User Manual
Abdul Rahman Sherzad
 

Similar to Restful in Java (6)

مقدمه ای بر داده های پيوندی
مقدمه ای بر داده های پيوندیمقدمه ای بر داده های پيوندی
مقدمه ای بر داده های پيوندی
 
an introduction to Web 3.0 - Semantic Web
an introduction to Web 3.0 - Semantic Weban introduction to Web 3.0 - Semantic Web
an introduction to Web 3.0 - Semantic Web
 
متغیرهای
متغیرهایمتغیرهای
متغیرهای
 
Repository pattern
Repository patternRepository pattern
Repository pattern
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گراییسی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
 
Herat University Library Management System Persian User Manual
Herat University Library Management System Persian User ManualHerat University Library Management System Persian User Manual
Herat University Library Management System Persian User Manual
 

Restful in Java

  • 1.
  • 2. دانشگاه بناب RESTFUL استاد راهنما: مهندس غلامعلی نژاد حاجعلی ایرانی ارائه دهنده: سعید ستاری
  • 3. مقدمه REST معرفی REST قوانین REST مشخصات بررسی یک سیستم واقعی JAX-RS معرفی JAX-RS مفاهیم 3 / 28 REST فهرست
  • 4. Representational State Transfer • / 28 REST REST معرفی 4 Make Ant Maven در سال 2000 Roy Fielding • معرفی شده توسط Word Wide Web • یک مدل معماری برای سیستم های توزیع شده مانند
  • 5. / 28 REST REST قوانین 5 همه چیز به صورت منابع می باشند Customer, Locations, Item, List of users : • مثال منابع دارای معین کننده هویت می باشند URIs for web : • مثال واسط یکنواخت برای دسترسی به منابع HTTP methods (GET, POST, PUT, DELETE, HEAD): • مثال منابع دارای نماینده می باشند XML, JSON, Binary : • مثال می شوند Link منابع با یکدیگر Hyperlinks: • مثال 1 2 3 4 5
  • 6. / 28 REST REST مشخصات 6 Cacheable Stateless لایه بندی ساده نیازی به مکانیزم پی بری اضافی ندارد
  • 7. / 28 REST بررسی یک سیستم واقعی 7 (Bug System Tracking) سیستم خطاها پیگیری خطا summary, priority, user who reported it کاربران User name
  • 8. UML Notation: Generalization / inheritance / 28 REST بررسی یک سیتم واقعی 8 UML Notation: “whole-part” relationship (composition) “part” is exclusively owned by “whole” UML Notation: One-way association
  • 9. بررسی یک سیستم واقعی-منابع و مشخص کننده ها همه چیز یک منبع می باش1د Identifiers Note http://<host>/users All users http://<host>/users/{userId} A particular user http://<host>/bugs All bugs http://<host>/bugs/{bugId} A particular bug http://<host>/bugs/{bugId}/notes All notes for a particular bug http://<host>/bugs/{bugId}/notes/{not eId} A particular note for a particular bug / 28 REST 9 • منابع User,Bug,Note • All users, All bugs, All notes for a particular bug • • مشخص کننده ها مشخص کننده ها هستند 2
  • 10. / 28 REST واسط های یکنواخت 10 HTTP • متدهای HTTP verb Meaning Safe? Idempotent? Cacheable? POST Create* GET Retrieve PUT Update* DELETE Delete معانی دیگری هم دارند PUT و POST)*( )PASTE AFTER( می تواند برای به روز رسانی جزی و یا اضافه کردن چیزی به منابع استفاده شود POST PASTE ( آن را می شناسیم فرستاده شوند URI استفاده شود اگر تمام محتوی منابع تعیین شده که create می تواند به عنوان PUT )OVER
  • 11. بررسی یک سیستم واقعی-واسط یکنواخت / 28 REST 11 توضیحات عملیات GET http://<host>/users ها user لیست تمام POST http://<host>/users جدید user ساخت GET http://<host>/users/ بخصوص 345 user بازیابی یک PUT http://<host>/users/ بخصوص 345 user اصلاح یک DELETE http://<host>/users/ بخصوص 345 user حذف یک توضیحات عملیات GET http://<host>/bugs/234/notes لیست تمام متن های خطای 234 POST http://<host>/bugs/234/notes ساخت یک متن جدید برای خطای 234 [GET | PUT | DELETE] .../bugs/234/notes/ [بازیابی] اصلاح [حذف ] یک متن خطای 34 234 واسط یکنواخت برای دسترس 3ی به منابع
  • 12. بررسی یک سیستم واقعی-نمایش ها و منابع لینک شده / 28 REST 12 : XML • نمایش در GET http://localhost:9000/bugs/1/notes/1 Content-type: application/xml <Note href=“http://localhost:9000/bugs/1/notes/1 "> <description>It is really broken</description> <owner>http://localhost:9000/users/1</owner> </Note> POST http://localhost:9000/bugs Content-type: application/json { "Bug" : { "priority" : "P1", "reporter" : "http://localhost:9000/users/1", "summary" : "Something is wrong" } } منابع دارای نماینده می با4شند : JSON • نمایش در می 5 شوند Link منابع با یکدیگر
  • 13. / 28 REST JAX-RS معرفی 13 وب سرویس RESTFul جاوا برای API : JAX-RS
  • 14. / 28 REST JAX-RS مفاهیم کلیدی 14 • کلاس های منابع یا متدهای @Path • کلاس های جاوایی که حداقل دارای یک متد با حاشیه نویسی @GET , @PUT, @POST ی@ ا,ت Dح E هL خE رT چE • • با توجه به قرارداد یک منبع جدید کلاس برای هر درخواست ساخته می شود دیگر پیاده سازی های چرخه حیات را محدود نمی JSR • • متدهکاندی منابع از یک کلاس منبع توسط متد درخواست نقش دهنده حاشیه نویسی Public • یک متد (@GET, @PUT, @POST, @DELETE, @OPTIONS, @HEAD) می شود • کلاس های مهیا interface حاشیه نویسی می شوند و با یک یا چند @Provider • کناینن دکلا هس ها توسط پیاده سازی می شوند JAX-RS MessageBodyReader/MessageBodyWriter • ExceptionMapper • ContextResolver •
  • 15. حاشیه نویسی های پرکاربرد / JAX-RS مفاهیم / 28 REST 15 شرح هدف حاشیه نویسی @Path Class or Method منسوب به مسیر یک منبع @Consumes @Produces Class or Method لیستی از نوع های واسط ها که توانایی تحلیل و تولید کند @GET @POST @PUT @DELETE @OPTIONS @HEAD Method بکار برده شده توسط حاشیه نویسی متد HTTP افعال @PathParam Parameter (also field, POJO method) استخراج شود URI ارزشی که می تواند توسط
  • 16. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } پایه که متصل می URI شود به منبع
  • 17. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } برای متد HTTP متد getUser()
  • 18. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } قطعه / URI مسیر پارامتر
  • 19. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } GET …/users/{id}
  • 20. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } مقدار و نوع را بر می گرداند
  • 21. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } را در URI ارزش قسمت انتقال می دهد id پارامتر
  • 22. @Path("/users") public class UserHandler { @GET @Path("{id}") @Produces("application/xml”) public JaxbUser getUser(@PathParam("id") long id) { / 28 REST JAX-RS مثالی از 16 ... } GET http://localhost:9000/users/2 Content-Type: application/xml <?xml version="1.0" encoding="UTF-8"?> <User> … </User>
  • 23. 23 / 28 REST
  • 24. / 28 REST مباحث پیشرفته 18
  • 25. @Path and regular expression mapping / مباحث پیشرفته •@Path(path-expression) "{" variable-name [ ":" regular-expression ] "}“ • Examples • @Path("example2/{var:.+}") matches following: / 28 REST 19 • …/example2/a • …/example2/a/b/c • @Path("example3/{var:d+}") matches following: • …/example3/345 • …/example3/23 • @Path(“example4/{name}-{id}”) matches following: • …/example4/a-1 • …/example4/a----1
  • 26. @[Query|Header|Matrix|Cookie|Form]Param / مباحث پیشرفته • @QueryParam / 28 REST 20 • For example …/query?sorted=true @GET @Path("query") public String queryParamExample(@QueryParam(“sorted") String var) { return var; } • @MartixParam • For example …/users;sorted=true • @HeaderParam • For example “Date” header • @CookieParam / @FormParam
  • 27. package javax.ws.rs.ext public interface ExceptionMapper<E extends Throwable> { / 28 REST Exception Mappers / مباحث پیشرفته 21 Response toResponse(E exception); }
  • 28. MessageBodyReader / مباحث پیشرفته package javax.ws.rs.ext public interface MessageBodyReader<T> { / 28 REST 22 boolean isReadable(Class<?> type, Type genericType, Annotation annotations[], MediaType mediaType); T readFrom(Class<T> type, Type genericType, Annotation annotations[], MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException; }
  • 29. package javax.ws.rs.ext public interface MessageBodyWriter<T> { boolean isWriteable(Class<?> type, Type genericType, / 28 REST MessageBodyWriter / مباحث پیشرفته 23 Annotation annotations[], MediaType mediaType); long getSize(T t, Class<?> type, Type genericType, Annotation annotations[], MediaType mediaType); void writeTo(T t, Class<?> type, Type genericType, Annotation annotations[], MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException; }
  • 30. / 28 REST مباحث پیشرفته JAX-RS ویژگی های دیگر  24 @Encoded @Applica tionPath Cookies Security Context CacheControl Application Complex negotiation / Varian Integration with Spring t processing Security @OPTIONS, @HEAD, @HttpMethod PathSegment
  • 31. / 28 REST مباحث پیشرفته 25 ویژگی های بیشتر WADL Restful java clients REST support in Spring 3.0
  • 32. • Apache CXF (JAX-RS part):http://cxf.apache.org/docs/jax-rs.html • RESTEasy users guides: http://docs.jboss.org/resteasy/docs/1.1.GA/userguide/pdf/RESTEasy_Reference_ Guide.pdf • WizTools REST Client:http://code.google.com/p/rest-client/ / 28 REST منابع 26
  • 33. 33 / 28 REST با تشکر از تمامی حضار
  • 34. 28 / 28 REST ؟؟ سوال؟؟