Cómo implementar la función de impresión web en un mini programa
Nuestro diseño de arquitectura general incluye un backend de administración web, una capa de interfaz unificada API web y, por supuesto, bases de datos, así como un pequeño programa cliente. Todo el sistema de arquitectura todavía se basa en el contenido del "Diseño arquitectónico de la capa de interfaz API web que integra los miniprogramas WeChat" que presenté en mi ensayo anterior.
Todo el sistema proporciona servicios principalmente a través de API web. Y, al mismo tiempo, el sistema de gestión backend pasa por varias interfaces que mantienen el trabajo de gestión básico, como agregar, eliminar y modificar datos.
Las capas de Web API, podemos comprender la estructura en capas específica a través de la siguiente figura.
Con la aplicación generalizada de Web API basada en formato JSON, cada vez más empresas están adoptando la capa de servicio de interfaz Web API como núcleo de la interfaz unificada y también se ha convertido en la capa central de Web API. . La interfaz basada en el formato JSON se puede aplicar de forma amplia y multiplataforma a terminales móviles como IOS y Android. También se puede aplicar a sistemas comerciales web convencionales, sistemas comerciales Winform, aplicaciones WeChat, subprogramas WeChat, etc. formó su propio Sí, un conjunto de estándares de API web y documentación detallada son muy importantes.
Podemos refinarlo en el siguiente diagrama de diseño de arquitectura. Todos los módulos se expanden alrededor de la capa de interfaz API web. El almacenamiento de datos subyacente es completamente transparente para las aplicaciones de la capa superior y podemos dividirlo según sea necesario. bases de datos comerciales y el uso de bases de datos como mejor nos parezca.
También vemos un módulo de interacción de mensajes WeChat en la capa de interfaz de la API web. Para facilitar el procesamiento de los puertos de nombres de dominio, este módulo está unificado con la API web y es responsable del procesamiento de mensajes interactivos. Servidor Tencent WeChat para lograr varios procesos de envío de mensajes.
2. Implementación de la interfaz Web API basada en Asp.NET MVC
1) Método GET
Método GET, los parámetros de la interfaz incluyen cero o un parámetro. Además de múltiples parámetros, el valor devuelto puede ser un tipo básico simple, como una cadena, o un tipo de objeto personalizado complejo, etc., como se muestra en los siguientes códigos de interfaz.
///
/// Método GET simple para obtener datos ///
/// ID de cadena
/// Token de acceso a interfaz
///
{ return string.Format("Resultado de retorno, id:{0}", id); p>
} ///
/// Obtener datos mediante GET para múltiples parámetros ///
/// ID de cadena
/// Nombre
/// Acceso a interfaz token
///
{ return string.Format("Resultado devuelto, id:{0} nombre:{1}", id, nombre);
} ///
/// Parámetro test GET devuelve un objeto de clase de entidad personalizado ///
/// ID de cadena
/// < param name="token">Token de acceso a interfaz
///
{ return new CommonResult() { Data1 = id, Success = true };
} ///
/// Prueba GET devuelve un objeto de lista///
/// Token de acceso a interfaz
///
{
Lista ; lista = nueva Lista } 2) método POST El método POST también es el mismo que el método GET. Los parámetros de la interfaz incluyen cero o un parámetro, así como múltiples parámetros. El valor devuelto puede ser un tipo básico simple, como una cadena, o uno personalizado complejo. Tipo de objeto, etc. Estos son varios tratamientos de interfaz comunes. Sin embargo, para las definiciones de interfaz con múltiples parámetros, debemos convertirlas y definirlas usando el parámetro JObject, de modo que se puedan analizar fácilmente múltiples parámetros o parámetros de clase de entidad personalizados. Las siguientes son varias formas comunes de definir interfaces POST. /// /// La prueba utiliza el método POST para enviar datos. Hay múltiples parámetros de entrada y se procesa utilizando JObject /// . /// { obj dinámico = param id de cadena = obj. id; if (obj != null) { return string.Format("return result, id:{0}", id); } else { throw new MyApiException("Error al pasar parámetros"); } } /// /// La prueba utiliza POST para enviar datos, la entrada del parámetro es múltiple, use JObject para procesar /// /// { obj dinámico = parámetro; if (obj != null) { return obj.x * obj.y * 10; } else { throw new MyApiException("Error al pasar parámetros"); } } /// /// Pruebe el método POST. El método se define uniformemente en el modo de parámetro JObject, incluido un objeto de cadena de mensaje y un objeto CListItem /// /. // {dynamic obj = param; = null) p> { string msg = obj.msg; //Objeto de mensaje//Si obj.item es un objeto de clase, debe convertirse a JObject y luego convertirse al tipo correspondiente usando ToObject CListItem elemento = ( (JObject)obj.item).ToObject resultado.Data1 = msg; resultado.Data2 = item.Text; result.Data3 = item.Value; return result; } else { throw new MyApiException("Se produjo un error al pasar parámetros ") ; } } /// /// Modificar la agrupación, el método se define uniformemente en el modo de parámetro JObject, incluido un objeto de cadena contactId, un objeto de lista de cadenas groupIdList /// /// {dynamic obj = param; if (obj != null) { string contactId = obj.contactId //ID de contacto //Si es una lista similar a List List devuelve nuevo CommonResult(resultado); } else { throw new MyApiException ("Se produjo un error al pasar los parámetros, verifique si contactId y groupIdList están incluidos"); } } Clase de interfaz, generalmente heredamos la clase de Cree su propia clase base de interfaz API y manejamos su manejo de excepciones para responder a los errores en un formato unificado, como se muestra en la definición de código de la clase de interfaz a continuación. /// /// Este controlador se utiliza para presentar en detalle el diseño de interfaz de varios GET/POST /// Para el método GET, el método puede aceptar múltiples parámetros /// Para el método POST, si el método tiene parámetros, use el método POST y use los parámetros del objeto de parámetro JObject. /// Si el método POST tiene varios parámetros, como la interfaz API web más el token, el cliente debe agregar el parámetro a la URL, como url?token=123, y luego usar la operación POST /// resumen> [ ExceptionHandling] clase pública TestController: BaseApiController Donde ExceptionHandling es nuestra definición de procesamiento de filtrado de excepciones unificada, el código es el siguiente. /// /// Atributo de filtro de error personalizado de API /// clase pública ExceptionHandlingAttribute: ExceptionFilterAttribute { /// /// Procesamiento unificado de información de excepción de llamada y devolución de información de excepción personalizada /// /// < param name="context">Objeto de contexto HTTP anulación pública void OnException(HttpActionExecutedContext context) { //Manejo de excepciones personalizadas MyApiException ex = context.Exception as MyApiException; if (ex != null) { //Registrar información de excepción clave LogHelper.Error(context.Exception); throw new HttpResponseException( new HttpResponseMessage(HttpStatusCode.InternalServerError) { //Encapsula la información de excepción de procesamiento y devuelve el objeto JSON especificado Contenido = new StringContent(new BaseResultJson(ex.Message, false, ex.errcode ).ToJson()) , ReasonPhrase = "Exception" }); } //Manejo de excepciones generales string msg = string.IsNullOrEmpty(context.Exception.Message) ? "Se produjo un error en la interfaz, inténtelo nuevamente o comuníquese con el administrador": context.Exception.Message; throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode .InternalServerError) { Contenido = new StringContent(msg), ReasonPhrase = "Excepción crítica" }); } } 3) Procesamiento de código en el subprograma El subprograma se procesa principalmente a través de código JS para realizar el procesamiento de datos Obtener y enviar procesamiento, etc. . Por ejemplo, enumeramos un código de procesamiento POST representativo de la siguiente manera. //Método de prueba POst?wx.request({ url: '/api/h5/test/movies', datos: { p> compensación: inicio, tipo: 'caliente', límite: that.data.limit }, encabezado: { ?'Content-Type': 'aplicación/json' }, éxito: función (res) { console.log (res.data) var data = res.data.data; console.log(data); if (data.movies.length === 0) { eso. setData({ hasMore: false, hideLoading :true, }) } else { that.setData({ películas: that.data.films.concat(data.movies), inicio: that.data.start + data.movies.length, hasMore: true, hideLoading :true, }); } } }) Lo anterior es el código de definición de nuestra interfaz normal (parámetro único o parámetros múltiples, procesamiento de objetos simples y objetos complejos, espero que los lectores lo hagan). Desarrollar una interfaz API web puede resultar útil. > (); var resultado = true; //BLLFactory