Опитвам се да създам уеб API, който ще обработва данни, предоставени от USSD сървър от оператора на мобилна мрежа (MNO). По-долу е даден фрагмент от това как този вид взаимодействие работи с външната система, която е Моето приложение.
За всяка заявка трябва да определя на какво ниво е потребителят и да отговоря със съответното меню. MNO ще ми изпрати нещо като http://my_app_url?*123*#
. Тъй като няма нищо между последния * и #, определям, че това е заявка за основно меню и мога да отговоря с меню на потребителя, напр. 1. Регистрирайте се, 2. Проверка на баланса, 3. Поискайте ПИН. Ако приемем, че потребителят иска да провери баланса, той ще избере Меню 2 на мобилния си телефон и MNO ще ми изпрати http://my_app_url?*123*2#
. Отговарям с 1. Въведете номера на акаунта, 2. Поискайте обратно обаждане. Потребителят избира да въведе номера на сметката и MNO ще изпрати http://my_app_url?*123*2*1#
, което ще ми каже къде се намира потребителят.
Въпреки че цялото меню не е дълго, поддържането му може да стане объркващо, тъй като мога да имам следната комбинация. http://my_app_url?*123*1*2*3*1#
или http://my_app_url?*123*1*1*3#
или http://my_app_url?*123*2*1*3*1#
и т.н
Още информация:
Всяка заявка, изпратена от MNO, идва с мобилния номер на потребителя, идентификатор на USSD сесия, създаден от MNO, който ще остане, докато USSD сесията приключи, и USSD параметри, т.е. от първия * до # в примерите по-горе.
Съхранил съм менютата за USSD приложението в база данни (sql fiddle), така че в зависимост на нивото, на което е даден потребител, мога да знам какво меню да му сервирам, напр. ако това е основна заявка, мога да обслужвам потребителя с всички менюта, чието родителско_меню е 1. Ако това е заявка за проверка на баланса, ще отговоря с всички менюта, чието родителско меню е 2 и т.н. и т.н.
Настоящият ми подход за определяне на това каква заявка прави потребителят е да напиша множество оператори if else, но по средата губя следите и става сложно. Дълбоко в себе си чувствам, че трябва да има по-елегантен начин за анализиране на заявките, изпратени от потребителя, и определяне на какво ниво е заявката и знае какво да им служи. Можете ли да предоставите по-добър подход? Още по-добре, имате ли опит в изграждането на този тип приложение и бихте ли споделили логиката си на преминаване през менютата?