[Java] REST รู้จัก consumes, produces และทำให้ method รองรับหลาย mediatype

อีกเรื่องสำหรับการเขียน REST web services แต่ครั้งนี้ เราจะว่ากันด้วยลูกเล่นต่างๆ ที่เราสามารถประยุกต์ใช้เพิ่มเติม
เจ้าตัวเหลือง เปรียบเสมือน web service ของเรา @Consumes และ @Produces เป็นการกำหนด MediaType ให้กับ method web service แต่ละตัว โดยทั้ง 2 ตัวนี้มีข้อแตกต่างคือทิศทางการเรียกใช้งาน คือ @Consumes ใช้สำหรับ request และ @Produces ใช้สำหรับ response

@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Appdata create(Appdata entity) {
 System.out.println("POST:"+entity);
 return entity;
}
@XmlRootElement
public class Appdata {

 private Integer orderId;
 private String orderDate;
 private List items;

 /* (setter/getter) */

}

ตัวอย่างที่ผ่านมาหลายตัวเรามักจะเห็น MediaType มีแค่ชนิดเดียว แต่ในความจริงแล้วเราสามารถเปิดให้กำหนดหลายตัวได้โดยกำหนดในลักษณะ array ตัวอย่างนี้ก็รองรับ XML และ JSON ขึ้นอยู่กับการเรียกใช้งานจาก client


Request Header ที่เราจะต้องกำหนดเพื่อให้เข้ากับฝั่ง server ยิ่งถ้าเราเปิดช่องให้รองรับ MediaType หลายชนิดแล้ว ยิ่งมีความสำคัญในการเรียกใช้งาน รวมถึงผลลัพธ์ตรงตามที่ต้องการด้วย ซึ่ง header ที่สำคัญ คือ

    Content-Type จะสัมพันธ์กับ @Consumes ซึ่งใช้กับ request
    415 : Unsupported Media Type

    Accept จะสัมพันธ์กับ @Produces ซึ่งใช้กับ response
    406 : Not Acceptable

    Client Error ที่เกิดขึ้นนี้เกิดจากการใช้งานไม่ตรงกันกับการเขียนไว้ที่ฝั่ง server ส่งผลให้เรียกใช้งานไม่ได้


Request/Response Body หรือก็คือส่วนของข้อมูล (data) ที่เราต้องการรับ-ส่ง โดยมีตัวอย่างทั้ง XML และ JSON ให้ดูกันครับ โดยแปลงจาก Object ของ Appdata ด้านบน

MediaType : application/xml
    <appdata>
        <items>
            <itemid>1</itemid>
            <itemname>My Item</itemname>
        </items>
        <orderdate>12/02/2559</orderdate>
        <orderid>33</orderid>
    </appdata>
MediaType : application/json
    {
      "items": [
        {
          "itemId": 1,
          "itemName": "My Item"
        }
      ],
      "orderDate": "12/02/2559",
      "orderId": 33
    }

    Tools สำหรับทดสอบ REST โดยที่เราไม่ต้องเขียนโปรแกรมฝั่ง client ขึ้นมาเรียกใช้งาน ผมเคยใช้อยู่ 3 ตัว ความสามารถแตกต่างกันไปนิดหน่อยเลยขอแปะมาด้วยเผื่อเป็นตัวเลือกครับ
Postman Advanced REST client Boomerang - SOAP & REST Client

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง