Управление и сборка Url / строк из коллекции подстрок (или URL запроса сборки) - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующие группы строк, и я хотел бы создать строку в соответствии с синтаксисом: substr1.substr2.substr3 = substr1 + substr2 + substr3

data class Protocol( val http: String = "http://",
                     val https: String = "https://")

data class BaseUrl( val baseProd: String = "url_prod",
                    val baseDev: String = "url_dev",
                    val baseTest: String = "url_test")

data class ApiEndpoint( val GET_USER: String = "endpoint_get_user",
                        val LOGIN: String = "endpoint_login",
                        val REGISTER: String = "endpoint_get",
                        val FETCH_HISTORY: String = "endpoint_fetch_history")

data class WebUrl( val HOME: String = "path_home",
                   val BALANCE: String = "path_balance",
                   val MANAGE_SUBSCRIPTION: String = "path_manage_subscription")

data class RequestEnvironment( val mobile: String = "query_mobile",
                               val desktop: String = "query_desktop")

Моя цель - создать что-то, что строит строкикак это

UrlFactory.https.baseDev.GET_USER     //result: https://url_dev/get_user
UrlFactory.https.baseProd.HOME.mobile //result: https://url_prod/home?mobile=1
UrlFactory.http.baseDev.BALANCE       //result: http://url_dev/balance

Кто-нибудь создал хороший способ динамически обрабатывать строки URL, как это?

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете создать объект Url, который отвечает за создание строки URL.

Вы можете создать URL, передавая выбранные параметры через конструктор.

Когда объект сконструирован, вы можете вызвать toString, который объединит и вернет значения вместе.

class Url ( var protocol : Protocol, 
           var baseUrl : BaseUrl, 
           var apiEndpoint : ApiEndpoint, 
           var webUrl : WebUrl, 
           var requestEnvironment : RequestEnvironment) {

    override fun toString() : String {
        return protocol.value + 
            baseUrl.value + 
            apiEndpoint.value + 
            webUrl.value + 
            requestEnvironment.value
    }
}

Чтобы добавить еще один уровень безопасности при работе с вашими строками, я позволил себе преобразовать их в перечисления. Это даст вам возможность ограничить возможные значения, которые можно установить:

enum class Protocol(val value : String) {
    HTTP("http://"),
    HTTPS("https://")
}

enum class BaseUrl(val value : String) {
    BASE_PROD("url_prod"),
    BASE_DEV("url_dev"),
    BASE_TEST("url_test")
}

enum class ApiEndpoint(val value : String) {
    GET_USER("endpoint_get_user"),
    LOGIN("endpoint_login"),
    REGISTER("endpoint_get"),
    FETCH_HISTORY("endpoint_fetch_history")
}

enum class WebUrl(val value : String) {
    HOME("path_home"),
    BALANCE("path_balance"),
    MANAGE_SUBSCRIPTION("path_manage_subscription")
}

enum class RequestEnvironment(val value : String) {
    MOBILE("query_mobile"),
    DESKTOP("query_desktop")
}

Наконец, вот пример того, как вы можете создать свой URL:

fun main() {

    val url : Url = Url(Protocol.HTTP, 
                        BaseUrl.BASE_DEV, 
                        ApiEndpoint.GET_USER, 
                        WebUrl.HOME,
                        RequestEnvironment.MOBILE);

    println(url.toString())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...