package denominator.designate; import java.util.List; import java.util.Map; import denominator.model.Zone; import feign.Body; import feign.Headers; import feign.Param; import feign.RequestLine; // http://designate.readthedocs.org/en/latest/rest.html#v1-api public interface Designate { @RequestLine("GET /limits") Map<String, Object> limits(); @RequestLine("GET /domains") List<Zone> domains(); @RequestLine("POST /domains") @Body("%7B\"name\":\"{name}\",\"ttl\":{ttl},\"email\":\"{email}\"%7D") @Headers("Content-Type: application/json") Zone createDomain(@Param("name") String name, @Param("email") String email, @Param("ttl") int ttl); @RequestLine("PUT /domains/{id}") @Body("%7B\"id\":\"{id}\",\"name\":\"{name}\",\"ttl\":{ttl},\"email\":\"{email}\"%7D") @Headers("Content-Type: application/json") Zone updateDomain(@Param("id") String id, @Param("name") String name, @Param("email") String email, @Param("ttl") int ttl); @RequestLine("DELETE /domains/{domainId}") void deleteDomain(@Param("domainId") String domainId); @RequestLine("GET /domains/{domainId}/records") List<Record> records(@Param("domainId") String domainId); @RequestLine("POST /domains/{domainId}/records") @Headers("Content-Type: application/json") Record createRecord(@Param("domainId") String domainId, Record record); @RequestLine("PUT /domains/{domainId}/records/{recordId}") @Headers("Content-Type: application/json") Record updateRecord(@Param("domainId") String domainId, @Param("recordId") String recordId, Record record); @RequestLine("DELETE /domains/{domainId}/records/{recordId}") void deleteRecord(@Param("domainId") String domainId, @Param("recordId") String recordId); class Record { String id; String name; String type; Integer ttl; String data; Integer priority; // toString ordering @Override public String toString() { return new StringBuilder(name).append(type).append(ttl).append(data).append(priority) .toString(); } } }