/** * Runs REST validation on API, stores XML results into apiEntry. * * @param apiEntry informations about API. */ private void validateTreeXML(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("<results_of_REST_checking>"); RestValidator restValidator = new RestValidator(apiEntry.getResourceNodes()); String validation; if (restValidator.validateApi()) { validation = "Your API is RESTful."; } else { ErrsAndWarns errsAndWarns = countErrsAndWarns(apiEntry); if (errsAndWarns.getErrorsCount() == 0) { validation = "Your API is RESTful, but found " + errsAndWarns.getWarnsCount() + " warnings - see details of each resource."; } else { validation = "Your API is not RESTful, found " + errsAndWarns.getErrorsCount() + " errors and " + errsAndWarns.getWarnsCount() + " warnings - see details of each resource."; } } sb.append(validation); sb.append("</results_of_REST_checking>"); apiEntry.setMessage(sb.toString()); }
/** * Handles POST requests for / * * @param apiEntry the object with form data about entry point. * @param result BindingResult with data about validation of input data. * @return JSP page which will be shown. */ @RequestMapping(value = "/", method = RequestMethod.POST) public String doCheckAPI(ApiEntry apiEntry, BindingResult result) { if (result.hasErrors()) { return JSP; } if (!apiEntry.getUrl().startsWith("http://") && !apiEntry.getUrl().startsWith("https://")) { apiEntry.setUrl("http://" + apiEntry.getUrl()); } if (apiEntry.getUrl().length() < 10) { apiEntry.setMessage("Invalid URL"); return JSP; } createTree(apiEntry); if (HttpValidator.responseOk(apiEntry) && apiEntry.getResourceNodes().getDescendants().size() > 0) { validateTree(apiEntry); generateViewOfQuestionnaires(apiEntry); generateViewOfResources(apiEntry); generateViewOfTree(apiEntry); return JSPOkResponse; } else { return JSPBadResponse; } }
/** * Run REST validation on API, stores results into apiEntry. * * @param apiEntry informations about API. */ private void validateTree(ApiEntry apiEntry) { RestValidator restValidator = new RestValidator(apiEntry.getResourceNodes()); String validation = ""; if (restValidator.validateApi()) { if (apiEntry.getQuestionnaires().evaluate().equals("")) { validation = "</p><h3>Great Job! The API is RESTful!</h3><p>"; } validation = validation + "</p><h4>Automatically checked constraints</h4><p>Cache constraint OK!<br />Layered System constraint OK!<br />Uniform Interface OK! (for resources under the API structure)</p>"; } else { ErrsAndWarns errsAndWarns = countErrsAndWarns(apiEntry); if (errsAndWarns.getErrorsCount() == 0) { validation = "</p><h4>Automatically checked constraints</h4><p>Cache constraint OK!<br />Layered System constraint OK!<br />Uniform Interface OK! (for resources under the API structure)<br /> But found " + errsAndWarns.getWarnsCount() + " warnings - see yellow marks below for details.</p>"; } else { validation = "</p><h4>Automatically checked constraints</h4><p>Your API is not RESTful, found " + errsAndWarns.getErrorsCount() + " errors and " + errsAndWarns.getWarnsCount() + " warnings - see colored marks below for details.</p>"; } } apiEntry.setMessage(validation); }
/** * Generates the XML view of API tree from apiEntry and saves it to it. * * @param apiEntry Informations about tree. */ private void generateViewOfTreeXML(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("<api_tree>\n"); writeResourceNodeTreeViewXML( apiEntry.getResourceNodes(), apiEntry.getBaseUrl(), apiEntry.getMaxSiblings(), sb); sb.append("</api_tree>\n"); apiEntry.setMessage(sb.toString()); }
/** * Generates view of HTTP responses of resources in apiEntry and stores it into it. * * @param apiEntry with information about resource tree. */ private void generateViewOfResources(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); Set<String> visited = new HashSet<String>(); sb.append("\n<div id=\"resourceView\">"); writeResourceNodeView(apiEntry.getResourceNodes(), apiEntry.getBaseUrl(), sb, visited); sb.append("</div>\n"); apiEntry.setMessage(sb.toString()); }
/** * Generates the View of APIs resource tree. * * @param apiEntry for which the view is generated and stored into. */ private void generateViewOfTree(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("\n<div id=\"apiTree\">"); sb.append("<h4>The API structure:</h4> "); sb.append("<ul class=\"short\">\n"); writeResourceNodeTreeView( apiEntry.getResourceNodes(), apiEntry.getBaseUrl(), apiEntry.getMaxSiblings(), sb); sb.append("</ul>\n</div><p>"); apiEntry.setMessage(sb.toString()); }
/** * Counts REST errors and warnings in tree taken from apiEntry. * * @param apiEntry apiEntry information. * @return ErrsAndWarns object with counts. */ private ErrsAndWarns countErrsAndWarns(ApiEntry apiEntry) { ErrsAndWarns errsAndWarns = new ErrsAndWarns(); countErrsAndWarns(apiEntry.getResourceNodes(), errsAndWarns); return errsAndWarns; }