api设计 - 关于java 封装某个功能为api形式供其他用户调用的问题
PHP中文网
PHP中文网 2017-04-17 18:01:05
0
4
438

我现在的问题是我需要将某项业务,通过封装为get请求,供其他用户来调用,这样就有一个问题,我应该如何设计这个请求的返回结果的格式?因为有多种类型的返回结果,所以将每种返回结果存放到不同的字段,我现在想到的是给一个flag字段,但是需要调用者根据flag来判断展示结果中的哪个字段,不知道有没有什么更加优雅的实现方式。

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(4)
洪涛

Utiliser des génériques pour définir un objet de retour

public class ServiceResult<T> {

    private String msg="";//消息说明
    private int resultCode=0;//结果消息代码
    private T data;//返回的数据字段
    
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public int getResultCode() {
        return resultCode;
    }
    public void setResultCode(int resultCode) {
        this.resultCode = resultCode;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    
}

/**
 *
 * 一个service对象
 */
public class MyServices {

    public  List<User> getUserList(){
        
        return new ArrayList<User>();
    }
    
    public  User getUserByID(Long userId){
        
        return new User();
    }
}

/**
 *  user
 */
class User{
    private String name;
    private Long id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    
}

/**
 * request调用
 */
public class UserRequestObject {

    public void doReuest(String requestType){
        MyServices someMyServices=new MyServices();
        if(requestType.equals("userList")){
            
            ServiceResult<List<User>> result=new ServiceResult<List<User>>();
            result.setData(someMyServices.getUserList());
            
        }else if (requestType.equals("user")){
            ServiceResult<User> result=new ServiceResult<User>();
            result.setData(someMyServices.getUserByID(0L));
        }else{
            ServiceResult<Void> result=new ServiceResult<Void>();
            result.setData(null);
        }
        
        //数据转成JSON格式,返回给调用者
    }
}
PHPzhong

De manière générale, vous pouvez définir un format de retour comme suit. resultCode définit une variété de types de retour. Par exemple, à l'exception de resultCode, qui est 0, tout le reste est faux et errorMsg a des instructions spécifiques. L'objet de retour des affaires normales est décrit par result. , dans lequel nous pouvons définir diverses logiques normales. Type de retour, par exemple, vous pouvez utiliser resultType pour représenter différents types. Plusieurs champs enveloppent respectivement différents types de résultats. Si la différence n'est pas grande, vous n'avez pas nécessairement besoin de plusieurs champs, d'un seul champ (le contenu du champ à l'intérieur). peut être null) .


{
    String resultCode;
    String errorMsg;
    Object result;
}

result描述:
{
    String resultType;
    ResultForm resultForm;
}
洪涛

S'il s'agit de http, vous pouvez utiliser l'en-tête pour transmettre le format de la requête, puis l'interface détermine le format de la réponse correspondante. Le non-HTTP est également similaire. L'appelant fournit le format ou le champ requis, et le serveur peut fournir des résultats différents selon l'identification.

洪涛
{
    String code;
    String msg;
    Object result;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal