Добавление ссылок в ответы REST - PullRequest
2 голосов
/ 08 марта 2011

У меня есть службы REST, которые отвечают некоммерческими доменными объектами.Например:

Request:
GET http://someAddress.com/customer/001

Response:
<customer>
    <id>001</id>
    <name>Some Guy</name>
    ...
</customer>

Я хотел бы добавить несколько ссылок в ответ для обнаружения служб.Например:

<customer>
    <id>001</id>
    <name>Some Guy</name>
    ...
    <link xml:link="delete" href="http://someAddress.com/customer/001"/>
</customer>

Меня беспокоит, не вызовет ли это проблемы с сортировкой.Я хочу, чтобы ссылки были обнаруживаемыми, но я хочу, чтобы потребители легко использовали схему домена, которая не содержит элементов для ссылок.

Лучше ли размещать ссылки в другом месте в ответе?Если да, то где?

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Предполагая, что вы используете JAXB для слоя объект-XML, вы можете сделать что-то вроде следующего с XmlAdapter, но вместо String вам понадобится объект для Link:

import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class CustomerAdapter  extends XmlAdapter<String, Customer>{

    private JAXBContext jaxbContext;

    public CustomerAdapter() {
        try {
            jaxbContext = JAXBContext.newInstance(Customer.class);
        } catch(JAXBException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public String marshal(Customer v) throws Exception {
        if(null == v) {
            return null;
        }
        return "http://someAddress.com/customer/" + v.getId();
    }

    @Override
    public Customer unmarshal(String v) throws Exception {
        if(null == v) {
            return null;
        }

        URL url = new URL(v);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Accept", "application/xml");

        Customer customer = (Customer) jaxbContext.createUnmarshaller().unmarshal(connection.getInputStream());
        connection.disconnect();
        return product;
    }

}

Для получения дополнительной информации о XmlAdapter см .:

0 голосов
/ 08 марта 2011

Если вы действительно не хотите изменять свои схемы для поддержки элемента link, вы можете использовать заголовки Link.http://tools.ietf.org/html/rfc5988

...