ceph-rest-api_快速检查REST API是否有效的方法-从清单文件中获取详细信息

ceph-rest-api

在某些情况下,您可能想快速验证部署在开发,测试或生产环境中的REST API是否完全可以访问。 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本。 您可以手动触发对此资源的请求,或者更好的是,执行Jenkings / Hudson作业,该作业在部署后运行检查作业。 在这篇文章中,我将介绍如何实现从应用程序清单文件中读取实现细节的服务。 经验证的API是本教程中开发的API –借助Jersey和Spring在Java中进行REST API设计和实现

使用的软件

  1. 泽西岛JAX-RS实现2.14
  2. Spring4.1.4
  3. Maven 3.1.1
  4. JDK 7

REST资源

我开发了两个从清单文件读取的REST资源:

  • / manifest –将清单的主要属性作为键,值对返回
  • / manifest / implementation-details –仅返回清单文件中的实现详细信息

清单REST资源

@Path("/manifest")
public class ManifestResource {
	
	@Autowired
	ManifestService manifestService;
	
	@GET
	@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
	public Response getManifestAttributes() throws FileNotFoundException, IOException{
		Attributes manifestAttributes = manifestService.getManifestAttributes();
		
		return Response.status(Response.Status.OK)
				.entity(manifestAttributes)
				.build();
	}	
	
	@Path("/implementation-details")
	@GET	
	@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
	public Response getVersion() throws FileNotFoundException, IOException{
		ImplementationDetails implementationVersion = manifestService.getImplementationVersion();
		
		return Response.status(Response.Status.OK)
				.entity(implementationVersion)
				.build();
	}
	
}

请求

GET请求示例–实施细节

GET http://localhost:8888/demo-rest-jersey-spring/manifest HTTP/1.1
Accept-Encoding: gzip,deflate
Accept: application/json
Host: localhost:8888
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

回应– 200 OK

JSON格式的回应

{
   "Implementation-Title": "DemoRestWS",
   "Implementation-Version": "0.0.1-SNAPSHOT",
   "Implementation-Vendor-Id": "org.codingpedia",
   "Built-By": "ama",
   "Build-Jdk": "1.7.0_40",
   "Manifest-Version": "1.0",
   "Created-By": "Apache Maven 3.1.1",
   "Specification-Title": "DemoRestWS",
   "Specification-Version": "0.0.1-SNAPSHOT"
}

成功返回的值(HTTP状态200 OK)包含与实现和规范详细信息有关的不同默认数据。 这些是使用Maven插件自动生成的清单文件,我将在下一部分中介绍。

用Maven生成清单文件

由于演示应用程序是一个Web应用程序,因此我使用Apache Maven Archiver支持的Apache maven war插件来生成清单文件:

maven-war-plugin配置

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.5</version>
	<configuration>
		<warName>${project.artifactId}</warName>
		<archive>
			<manifest>
				<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
				<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
			</manifest>
		</archive>					
	</configuration>
	<executions>
		<execution>
			<phase>package</phase>
			<goals>
				<goal>manifest</goal>
			</goals>
			<inherited>true</inherited>
		</execution>
	</executions>				
</plugin>

从pom.xml文件中定义的项目属性中,addDefaultImplementationEntries和addDefaultSpecificationEntries将分别生成默认实现和规范详细信息:

默认实施细节

Implementation-Title: ${project.name}
Implementation-Version: ${project.version}
Implementation-Vendor-Id: ${project.groupId}
Implementation-Vendor: ${project.organization.name}
Implementation-URL: ${project.url}

, 分别:

默认规格详细信息

Specification-Title: ${project.name}
Specification-Version: ${project.version}
Specification-Vendor: ${project.organization.name}

有关更多详细信息,请参见Apache Maven Archiver

请注意,为了也在文件系统中的webapp / META-INF下生成Manifest.mf文件,您需要将清单目标绑定到执行阶段(例如,包):

将清单目标绑定到打包阶段

<executions>
	<execution>
		<phase>package</phase>
		<goals>
			<goal>manifest</goal>
		</goals>
		<inherited>true</inherited>
	</execution>
</executions>

从清单文件读取

从清单文件读取发生在注入的ManifestService类中:

ManifestService.java

public class ManifestService {
	
	@Autowired
	ServletContext context;
		
	Attributes getManifestAttributes() throws FileNotFoundException, IOException{
	    InputStream resourceAsStream = context.getResourceAsStream("/META-INF/MANIFEST.MF");
	    Manifest mf = new Manifest();
	    mf.read(resourceAsStream);
	    Attributes atts = mf.getMainAttributes();
	    
	    return atts;	    		
	}	
	
	ImplementationDetails getImplementationVersion() throws FileNotFoundException, IOException{
	    String appServerHome = context.getRealPath("/");
	    File manifestFile = new File(appServerHome, "META-INF/MANIFEST.MF");

	    Manifest mf = new Manifest();

	    mf.read(new FileInputStream(manifestFile));

	    Attributes atts = mf.getMainAttributes();
	    ImplementationDetails response = new ImplementationDetails();
	    response.setImplementationTitle(atts.getValue("Implementation-Title"));
	    response.setImplementationVersion(atts.getValue("Implementation-Version"));
	    response.setImplementationVendorId(atts.getValue("Implementation-Vendor-Id"));
	    
	    return response;		
	}
	
}

要访问MANIFEST.MF文件,您需要注入ServletContext并调用其方法之一。

  • SerlvetContext#getResourceAsStream() –(首选方式)
  • ServletContext#getRealPath() –获取与给定虚拟路径相对应的真实路径。 返回的实际路径将采用适合运行servlet容器的计算机和操作系统的形式,包括适当的路径分隔符。 在这种情况下,最大的问题是,如果不部署.war爆炸,则将无法访问清单文件。

Java EE版本

在JavaEE环境中,您可以通过@Context批注注入ServletContext:

Java EE实施版本

public class ManifestResource {
	
	@Context
	ServletContext context;
	
	@GET
	@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })	
	public Response getManifestAttributes() throws FileNotFoundException, IOException{
	    InputStream resourceAsStream = context.getResourceAsStream("/META-INF/MANIFEST.MF");
	    Manifest mf = new Manifest();
	    mf.read(resourceAsStream);
	    Attributes atts = mf.getMainAttributes();
	    
		return Response.status(Response.Status.OK)
				.entity(atts)
				.build();	    		
	}
	...
}

在这里,您可以找到一种快速的方法来验证REST api是否可以访问。

资源资源

  1. 阿帕奇Maven
    1. Apache Maven存档器
    2. 构建生命周期简介#Built-in_Lifecycle_Bindings
  2. Oracle文档– 处理清单文件:基础知识
  3. 堆栈溢出
    1. 如何在运行时获取Maven Artifact版本?
    2. 如何像Pom一样从Java方法获取Maven项目版本

翻译自: https://www.javacodegeeks.com/2015/01/quick-way-to-check-if-the-rest-api-is-alive-get-details-from-manifest-file.html

ceph-rest-api

K8s部署分布式存储Ceph系统搭建与实战 存储系统是个专业性的整个体系,我们只用常见方式搭建,具体优化需要参照公司自己的产品等各种进行调整 阅读详情

相关推荐

S3Browser从零配置到跨域访问实战指南

本文提供S3Browser从安装配置到实战应用的完整指南。详细讲解了如何连接Ceph等S3兼容存储,重点解析了跨域访问(CORS)配置这一核心痛点,通过图形化界面轻松解决前端开发中的跨域问题,并分享了日常文件管理技巧与常见问题排查思路,助力用户高效管理对象存储。

weixin_29310605的博客 302

go-ceph-rest-api:Go 中的 Ceph Rest API

go-ceph-rest-api 我们可怜地尝试移植 Ceph API。 初始化子模块 ceph-ansible 克隆后,运行 $ git submodule init $ git submodule update 设置工作区 我们需要访问 cephceph-dev 库来处理这个问题。 启动 vagrant box 以启动工作区。 $ vagrant up 工作区应该安装在/vagrant/workspace 。 这被设置为$GOPATH以在 VM 内部工作。 构建项目 构建二进制文件是在 VM 内完成的。 $ vagrant ssh $ cd /vagrant/workspace/src/github.com/darkcrux/go-ceph-rest-api $ go get $ go build 运行 API 目前,二进制文件将使用默认的 ceph 配置。 这需

ceph对象存储和REST api访问对象存储实战

对象存储将数据存储为离散的项,每个项单独称为一个对象。与文件系统中的文件不同,对象不是在目录和子目录树中组织的。相反,对象存储在平坦的名称空间中。通过使用对象的唯一对象ID(也称为对象键)检索每个对象。应用程序不使用普通的文件系统操作来访问对象数据。相反,应用程序访问REST API来发送和接收对象。Red Hat Ceph Storage支持两种最常见的对象api: Amazon S3(简单存储服务)和OpenStack Swift(OpenStack对象存储)。

悦分享 450

ceph jewel rest api

ceph jewel rest api

ceph-rest-api的使用

最近在想怎么去更有效的监控和管理ceph集群的问题,之前主要就是脚本调用ceph的命令,有没有更方便和有效的方式呢?之前部署过calamari,不过这个calamari比较庞大,所以看看ceph原生的rest api. ceph rest api是一个wsgi(Web Service Gateway Interface)应用,默认监听5000端口 ceph-rest-api

hit1944的专栏 8618

快速检查REST API是否有效方法-清单文件获取详细信息

在某些情况下,您可能想快速验证部署,开发,测试或生产环境中的REST API是否完全可以访问。 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本。 您可以手动触发对此资源的请求,或者甚至更好的是,执行Jenkings / Hudson作业,该作业在部署后运行检查作业。 在这篇文章中,我将介绍如何实现从应用程序清单文件中读取实现细节的服务。 经过验证的API是本教程中开发的...

最佳 Java 编程 533

使用Rest api管理Ceph网关

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34292959的博客 261

CentOS7快速部署Ceph集群

A Ceph Storage Cluster requires at least one Ceph Monitor, Ceph Manager, and Ceph OSD (Object Storage Daemon). Monitors: A Ceph Monitor (ceph-mon) maintains maps of the cluster state, including the ...

bifu727865211的博客 789

Ceph分布式存储

CEPH 简介 无论您是想为云平台提供Ceph 对象存储和/或 Ceph 块设备服务、部署Ceph 文件系统还是将 Ceph 用于其他目的,所有 Ceph 存储集群部署都从设置每个 Ceph 节点、您的网络和 Ceph开始存储集群。一个 Ceph 存储集群至少需要一个 Ceph Monitor、Ceph Manager 和 Ceph OSD(对象存储守护进程)。运行 Ceph 文件系统客户端时也需要 Ceph 元数据服务器。 Monitors Ceph Monitor ( ceph-mon) 维护集群状

LiGuogang 854

Ceph集群安装及java微服务开发连接测试

Ceph安装及java连接测试

z1834926267的博客 1682

ceph mimic版本 部署安装

ceph寻址过程 1. file --- object映射,把file分割成N个相同的对象 2.object - PG映射,利用静态hash得到objectID的伪随机值,在 "位与" mask上使得object获取属于自己的PG 3.pg --osd映射,将pg映射到实际的存储单元osd,RADOS利用cru...

weixin_30470643的博客 2854

Ceph分布式存储入门:从核心架构到生产部署实战指南

分布式存储系统通过将数据分散在多台服务器上,实现了高可靠性和弹性扩展能力。其核心原理基于数据分片、多副本机制和一致性哈希算法,确保数据安全性和访问效率。在技术价值层面,分布式存储能够降低硬件成本,提升系统容错性,并支持横向扩展。典型应用场景包括云平台存储后端、大数据分析和备份归档等。Ceph作为开源分布式存储的重要代表,采用去中心化架构和CRUSH数据分布算法,通过Monitor、OSD等组件协作,提供了对象存储、块存储和文件系统的统一解决方案。本文基于官方技术讲座,重点解析Ceph集群部署、存储池创建和性

weixin_30905133的博客 390

ceph第二篇: ceph集群应用基础(块存储,对象存储,挂载配置)

RBD是Ceph提供的块存储服务,类似于传统的硬盘分区或LUN。Ceph Fs 需要运行 Meta DataServices(MDS)服务,其守护进程为ceph-mds,ceph-mds 进程管理与 cephfs 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问。使用 CephFs 之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池,如下命令将创建名为 mycephfs 的文件系统,它使用 cephfs-metadata 作为元数据存储池。

weixin_43743301的博客 525

从小白到大神之路之学习运维第46天---第三阶段----Ceph分布式存储系统(CentOS7.9版本下安装部署ceph

从小白到大神之路之学习运维第46天---第三阶段----Ceph分布式存储系统(CentOS7.9版本下安装部署ceph

共产主义接班人 1457

推荐开源项目:Calamari - Ceph 管理与监控利器

推荐开源项目:Calamari - Ceph 管理与监控利器 calamari Web-based monitoring and management for Ceph 项目地址: https://gitcode.com/gh_mirrors/cal/calama...

gitblog_00005的博客 494

云原生(三十二) | Kubernetes篇之平台存储系统介绍

目录Kubernetes平台存储系统介绍一、Ceph1、基本概念二、Rook1、基本概念2、operator是什么存储系统是个专业性的整个体系,我们只用常见方式搭建,具体优化需要参照公司自己的产品等各种进行调整官方网址:https://ceph.io/Ceph可以有Ceph对象存储:键值存储,其接口就是简单的GET,PUT,DEL等。如七牛,阿里云oss等Ceph块设备:AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)Ceph文件系统:它比块存储具有更

Lansonli(蓝深李)的博客 1956

ceph分布式存储】集群搭建,原生数据存取演示

什么是Ceph?搭建Ceph集群有哪些步骤?搭建Ceph集群容易出现哪些问题?该如何解决?Ceph集群如何扩容与缩容?Ceph集群核心组件有哪些?osd down如何解决?

m0_71837291的博客 277

Python之rgwfuncs包语法、参数和实际应用案例

rgwfuncs 是面向Ceph RGW(RADOS Gateway)的Python工具包,专注于简化Ceph对象存储的管理、监控、运维操作,封装了Ceph RGW的REST API、用户管理、存储桶管理、配额、权限、日志等核心功能,无需手动构造复杂API请求,适合运维人员、开发者快速对接Ceph RGW集群。

王国平的博客 205
上一篇: 响应式多级菜单 侧边菜单栏_使用纯HTML和OmniFaces构建动态响应的多级菜单
下一篇: 突破极限–如何使用AeroGear Unified Push for Java EE和Node.js
dnc8371
博客等级 码龄12年 421粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值