void ApiClient::GetTypes(const TypesCompletionCallback& callback) const
{
- Url::Ptr url = new Url("https://" + m_Connection->GetHost() + ":" + m_Connection->GetPort() + "/v1/types");
+ Url::Ptr url = new Url();
+ url->SetScheme("https");
+ url->SetHost(m_Connection->GetHost());
+ url->SetPort(m_Connection->GetPort());
+
+ std::vector<String> path;
+ path.push_back("v1");
+ path.push_back("types");
+ url->SetPath(path);
try {
boost::shared_ptr<HttpRequest> req = m_Connection->NewRequest();
void ApiClient::GetObjects(const String& pluralType, const ObjectsCompletionCallback& callback,
const std::vector<String>& names, const std::vector<String>& attrs) const
{
- String url = "https://" + m_Connection->GetHost() + ":" + m_Connection->GetPort() + "/v1/objects/" + pluralType;
+ Url::Ptr url = new Url();
+ url->SetScheme("https");
+ url->SetHost(m_Connection->GetHost());
+ url->SetPort(m_Connection->GetPort());
+
+ std::vector<String> path;
+ path.push_back("v1");
+ path.push_back("objects");
+ path.push_back(pluralType);
+ url->SetPath(path);
String qp;
- BOOST_FOREACH(const String& name, names) {
- if (!qp.IsEmpty())
- qp += "&";
+ std::map<String, std::vector<String> > params;
- qp += pluralType.ToLower() + "=" + name;
+ BOOST_FOREACH(const String& name, names) {
+ params[pluralType.ToLower()].push_back(name);
}
BOOST_FOREACH(const String& attr, attrs) {
- if (!qp.IsEmpty())
- qp += "&";
-
- qp += "attrs[]=" + attr;
+ params["attrs"].push_back(attr);
}
- Url::Ptr pUrl = new Url(url + "?" + qp);
+ url->SetQuery(params);
try {
boost::shared_ptr<HttpRequest> req = m_Connection->NewRequest();
req->RequestMethod = "GET";
- req->RequestUrl = pUrl;
+ req->RequestUrl = url;
req->AddHeader("Authorization", "Basic " + Base64::Encode(m_User + ":" + m_Password));
m_Connection->SubmitRequest(req, boost::bind(ObjectsHttpCompletionCallback, _1, _2, callback));
} catch (const std::exception& ex) {
using namespace icinga;
-Url::Url() {}
+Url::Url()
+{ }
Url::Url(const String& base_url)
{
{
return m_Fragment;
}
+
void Url::SetScheme(const String& scheme)
{
m_Scheme = scheme;
m_Port = port;
}
+void Url::SetHost(const String& host)
+{
+ m_Host = host;
+}
+
+void Url::SetPort(const String& port)
+{
+ m_Port = port;
+}
+
void Url::SetPath(const std::vector<String>& path)
{
m_Path = path;
if (m_Path.empty())
url += "/";
else {
- BOOST_FOREACH (const String p, m_Path) {
+ BOOST_FOREACH (const String& segment, m_Path) {
url += "/";
- url += Utility::EscapeString(p, ACPATHSEGMENT, false);
+ url += Utility::EscapeString(segment, ACPATHSEGMENT, false);
}
}
void SetScheme(const String& scheme);
void SetAuthority(const String& username, const String& password,
const String& host, const String& port);
+ void SetHost(const String& host);
+ void SetPort(const String& port);
void SetPath(const std::vector<String>& path);
void SetQuery(const std::map<String, std::vector<String> >& query);
void AddQueryElement(const String& name, const String& query);