全部產品
Search
文件中心

Mobile Platform as a Service:業務介面定義規範

更新時間:Jul 13, 2024

考慮到手機端開發環境的限制(尤其是 iOS 系統),以及保持介面定義的簡單,服務端在定義行動服務介面時,不能使用 Java 文法的全集。

介面定義規範涉及三類定義:

內部支援資料類規範

不支援的資料類型

  • 容器類型不能多層嵌套。

  • List 或 Map 必須有泛型資訊。

  • List 或 Map 的泛型資訊不能是 array 類型

  • 不支援單位元組(位元組資料 byte [] 是支援的)

  • 不支援對象數組,請用 list 代替。

  • 屬性名稱不能是 data 和 description,會與 iOS 的屬性衝突。

  • Map 類型的 key 必須是 String 類型。

  • 類型不能是抽象類別。

  • 類型不能是介面類。

錯誤的寫法:

public class Req {
    private Map<String,List<Person>> map; //容器類型不能多層嵌套。
    private List<Map<Person>> list; //容器類型不能多層嵌套。
    private List list1; //List 或 Map 必須有泛型資訊。
    private Map map1; //List 或 Map 必須有泛型資訊。
    private List<Person[]> listArray; //List 或 Map 的泛型資訊不能是 Array 類型。
    private byte b; //不能為單位元組
    private Person[] personArray; //不支援對象數組,請用 List 代替
    private String description; //屬性名稱不能為 description
}

支援的資料類型

boolean, char, double, float, int, long, short
java.lang.Boolean
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.util.List,但:必須使用型別參數;不能使用其具體子類 以下簡稱 List
java.util.Map,但:必須使用型別參數;不能使用其具體子類;key 類型必須是 String 以下簡稱 Map
Enum
byte[]

正確的寫法:

public class Req {
    private String s = "ss";
    private int i;
    private double d;
    private Long l;
    private long l1;
    private boolean b;
    private List<String> stringList;
    private List<Person> personList;
    private Map<String,Person> map;
    private byte[] bytes;
    private EnumType type;
}

public class Person {
    private String name;
    private int age;

使用者介面類規範

method 的參數

不可以引用:

  • 枚舉類型

  • 除上文提到的 Map、List、Set 之外的泛型

  • 抽象類別

  • 介面類

  • 原生類型的數組

可以引用:

  • 具體的實體類,要求參考型別與實際的物件類型保持一致;不可使用父類參考型別指向子類對象。

  • 內部支援資料類,但數組、Map、List、Set 這些集合類型不可以嵌套。

如下是錯誤樣本:

Map<String,String[]>
Map<String,List<Person>>(Person為一個具體的實體類)
List<Map<String,Persion>>
List<Persion[]>

method 的傳回值

不可以引用:

  • 枚舉類型

  • 除上文提到的 Map、List、Set 之外的泛型

  • 抽象類別

  • 介面類

  • 原生類型的數組

可以引用:

  • 具體的資料類,要求參考型別與實際的物件類型保持一致;不可使用父類參考型別指向子類對象,例如,不能用 Object 引用指向其它對象。

    重要

    如果父類為具體類,產生工具將檢查不出此類錯誤。

  • 內部支援的資料類見文章開頭定義。數組、Map、List、Set 集合類型不可以嵌套,參見上文相關樣本。

method 的定義

  • 使用 @OperationType 註解,未加此註解的方法將被產生工具忽略。

  • method 不可 overloading。

代碼產生工具限制

  • 允許介面類定義的繼承關係,但會合并層次關係。

  • 允許但忽略介面類中定義變數。

  • 允許但忽略介面類中的方法聲明拋出異常。

  • 一個源檔案中只能包含一個介面類的定義,不能包含其它類(內部類、匿名類等)的定義。

  • 介面類定義本身和其引用到的類型必須為內部支援資料類或可以從源碼獲得定義。

使用者定義實體類規範

field 定義

不可以引用:

  • 枚舉類型

  • 除上文提到的 Map、List、Set 之外的泛型

  • 抽象類別

  • 介面類

  • 原生類型的數組

可以引用:

  • 具體的實體類,要求參考型別與實際的物件類型保持一致;不可使用父類參考型別指向子類對象。

  • 內部支援資料類。數組、Map、List、Set 集合類型不可以嵌套,參見上文相關樣本。

  • 修飾符包括 transient 的屬性將會被忽略。

  • final static int 定義的常量(其它不符合該要求定義的常量或靜態變數將被忽略)。

    說明

    不推薦 is 開頭的成員變數定義。

類的定義

  • 可以繼承自其它實體類。

  • 忽略其方法聲明,產生工具將會自動根據實體類欄位產生 setter/getter 方法。

代碼產生工具限制

  • 屬性的聲明必須一行一個。

  • 允許但忽略使用者定義實體類實現的介面。

  • 一個源檔案中只能包含一個使用者定義實體類的定義,不能包含其它類(內部類、匿名類等)的定義。

  • 介面類定義本身和其引用到的類型必須為內部支援資料類或可以從源碼獲得定義。