2014-06-10 116 views
0

我有一個網站,所有代碼都是用PHP編寫的(以及HTML,JavaScript,SQL等)。我目前正在爲這個網站製作一個iPhone App,爲了訪問我需要的不同SQL數據,我正在構建一種API。到目前爲止,我只需要非常簡單的數據,所以只需要一個查詢,一個if/else,我就可以獲得我的數據,而我只需用JSON來回應它。一切都很簡單。使用JSON和PHP創建註冊API

但我現在想爲網站的註冊部分製作API。在頁面上,我會收到來自iPhone應用程序(用戶名,密碼,電子郵件等)的數據,並且我必須檢查用戶名是否尚未使用,密碼是否有效且是否匹配,如果電子郵件是有效的,還沒有使用,等等。如果其中一個條件不匹配,我顯然必須告訴應用程序哪裏出了問題。如果他們都可以,那麼我就註冊,然後我告訴我已經完成了這個應用。

但是我對jSON/API概念不是很熟悉,我不知道正確的做法是什麼。你如何處理jSON中的多個響應等等。這個問題聽起來很基本,但這正是我的立場。 我的意思是,我會做這樣的事情:

 if ($_POST['pass'] == $_POST['pass_confirm']) {      
     if(!isValidPassword($_POST['pass'])){ 
      echo '{"success":0,"error_message":"Password invalid"}'; 
     }else{ 

的整個方式。但是,這給了我一個巨大的屁股代碼,這個代碼很簡單,因爲相同的元素會一次又一次地重複。但我無法理解它。那麼,我怎麼可以簡化驗證簽名&發回JSON數據的整個過程。

謝謝。

回答

1

這是我的建議。只輸出一次你的JSON。將輸出封裝在函數調用中,例如function showOutput($success, $message) {}。設置你的條件語句,以便您正在測試的錯誤,而不是成功的,即:

if($pass !== $pass_confirm) { 
    showOutput(false, 'Passwords don\'t match'); 
    return; 
} 

// Here I know I'm still on a successful track 

這也被稱爲guard clauses,將有助於阻止你實現你可能已經患上了arrow anti-pattern,或如果增加額外的要求,將來可能會發展。對比,與當前的做法:

if($pass === $pass_confirm) { 
    if($someotherCondition) { 
     if($managerBobsCondition) { 
      // success! 
     } 
    } 
} 

該代碼可以被重構,看起來像這樣:

if($pass !== $pass_confirm) { 
    // error! 
} 

if(!$someotherCondition) { 
    // error! 
} 

if(!$managerBobsCondition) { 
    // error! 
} 

// success! 

這是很多清潔/更容易閱讀。添加額外的需求也更直接,因爲你沒有一個複雜的邏輯樹,你需要排序,找出你需要把新的else if條件!

+0

這正是我一直在尋找。我肯定會進入箭頭代碼的東西,所以這是很好的知道。我一直在做着完全相反的事情。歡呼聲,守望者! –

+0

很高興我可以幫助:)並祝你好運 –

1

您可以爲返回製作一個函數。

此外,還有一些在PHP函數來處理JSON像json_encode:http://www.php.net/manual/en/function.json-encode.php

function returnJSON($success, $message) 
{ 
    exit(json_encode(array(
     'success' => $success, 
     'error_message' => message 
    ))); 
} 


if (!isValidPassword($_POST['pass'])) 
    returnJSON(false, 'Password invalid');